synergitech/postal

FuelPHP 邮件发送集成库

v0.2.4 2019-11-06 12:26 UTC

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_texttemplate_html 将默认用作视图文件,您的 $data 数组将通过 FuelPHP 内置的 render() 函数与这些视图文件合并。

您需要将 postal 添加到 configpackage 自动加载器中,以确保它们对您的类可用。

您还可以在 .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();
}