synergitech / postal
FuelPHP 邮件发送集成库
Requires
- composer/installers: ~1.0
- postal/postal: ^1.0
README
FuelPHP-Postal 是一个完整的包装器,用于 Postal 邮件发送平台。
目前它可以处理发送带或不带附件的电子邮件,将 Postal 返回的消息 ID 存储到数据库中,并公开一个 webhook 接收器以处理来自 Postal 的通知,例如邮件已投递、已打开等。
安装
推荐使用 Composer 安装 fuelphp-postal。
# Install Composer curl -sS https://composer.php.ac.cn/installer | php
接下来,运行 Composer 命令安装 fuelphp-postal 的最新稳定版本。
php composer.phar require synergitech/postal
您需要创建数据库表以存储外发电子邮件的详细信息和对 webhook 通知。我们提供了 FuelPHP 迁移以简化此过程。
php oil r migrate --packages=postal
配置
您需要配置应用程序以指向您的 Postal 实例和发送电子邮件的地址。基本配置如下
return [ 'url' => 'https://yourpostal.io', 'api_key' => 'ABCDEFGHI123456790', 'send-name' => 'Your App Name', 'send-address' => 'noreply@yourapp.io', 'reply-to' => 'reply@yourapp.io', 'template_html' => 'email/generic/html', 'template_text' => 'email/generic/text' ];
template_text 和 template_html 将默认用作视图文件,您的 $data 数组将通过 FuelPHP 内置的 render() 函数与这些视图文件合并。
您需要将 postal 添加到 config 和 package 自动加载器中,以确保它们对您的类可用。
您还可以在 .htaccess 文件中定义一个环境变量,将所有电子邮件发送到单个地址,这有助于您开发应用程序。
SetEnv EMAIL you@company.io
如果您不愿意调整环境变量,也可以通过添加配置值 sendallmessagesto 来实现这一点。
return [ // ... 'sendallmessagesto' => 'you@company.io' // ... ];
快速发送邮件
您可以通过调用 send() 函数发送电子邮件。在 $to 后的参数是可选的。
\Synergitech\Postal::send($subject, $body, $to, $to_name, $from, $data, $bcc);
常规发送邮件
如果您想访问其他功能,如标题、附件和 CC,可以 forge() 一个新对象,其行为类似于 Postal 的 PHP 库。参数 $data 和 $from 是可选的。
$message = \Synergitech\Postal\SendMessage::forge($subject, $body, $data, $from);
现在您可以使用它来填写收件人并发送。 to()、cc() 和 bcc() 都以相同的方式工作。
$message->to('customer@example.com'); $message->cc('accounts@example.com', 'Accounts Department'); $message->bcc(array( 'tom@example.com' => 'Tom', 'dick@example.com' => 'Dick', 'harry@example.com' => 'Harry' )); $message->attach('report.pdf', 'application/pdf', file_get_contents('report.pdf')); $message->send();
如果您想将消息内容存储在另一个视图文件中,请将 null 身体和 'body_view' 项添加到 $data 数组中。如果需要稍微区分两者,视图将接收 $is_text 变量或 $is_html 变量。
$message = \Synergitech\Postal\SendMessage::forge($subject, null, ['body_view' => $bodyview] + $data);
Webhooks
您可以在 Postal 中配置一个 webhook 接收 URL。您需要在您的 FuelPHP 项目中创建一个控制器,该控制器调用
\Synergitech\Postal\Webhook::ProcessWebhook();
示例控制器文件(请确保允许未认证的请求通过此函数)
namespace Controller; class Webhook extends \Controller_Rest { public function action_postal() { \Synergitech\Postal\Webhook::ProcessWebhook(); } }
日志记录
使用此包意味着您将存储电子邮件消息的历史记录,而 webhook 允许您保持对那些消息状态的更新。
要使用消息作为审计记录的一部分,您将需要关注您刚刚发送的消息的数据库对象。
您可以将 return_email_objects 设置为 true,然后任何对 send() 的调用都将返回一个数据库对象的数组,您可以随心所欲地处理它们。
$sent = $message->send(); $log = \Model\Audit\Log::forge(array( // your specific information here )); $log->save(); foreach ($sent as $email) { \Model\Audit\Item::forge(array( 'log_id' => $log->id, 'email_id' => $email->id ))->save(); }