zfr/zfr-mail

基于常见邮件API的轻量级抽象

2.2.0 2017-10-16 07:45 UTC

This package is auto-updated.

Last update: 2024-08-29 04:31:05 UTC


README

Build Status

ZfrMail 是一个围绕常见邮件API的轻量级抽象。它只提供发送消息的方式(如果提供商支持,还可以是模板邮件)。

依赖

  • PHP 7.0+
  • Guzzle 6.0+

安装

ZfrMail 的安装仅支持通过 Composer 进行。

php composer.phar require 'zfr/zfr-mail:1.*'

用法

创建邮件

首先,创建一个邮件。邮件是不可变的,其逻辑与PSR-7对象类似。ZfrMail中有两种不同类型的邮件

  • 渲染的邮件:这些是你自己渲染的邮件,因此你需要手动设置文本和HTML正文。ZfrMail不提供与模板引擎(如Twig或Plates)的任何集成。渲染这些邮件取决于你。
  • 模板邮件:一些提供商(如Postmark或Mandrill)提供了一个模板系统,其中模板存储在提供商处。这使得非技术人员可以编辑邮件,并使维护更加容易。在使用之前,请确保你使用的提供商支持模板邮件。

例如,以下是如何创建一个简单的渲染邮件的示例

$mail = (new RenderedMail())->withFrom('from@test.com')
    ->withTo('to@test.com')
    ->withSubject('Hello')
    ->withTextBody('This is a mail')
    ->withHtmlBody('<p>This is a mail</p>');

以及一个模板邮件的示例

$mail = (new TemplatedMail())->withFrom('from@test.com')
    ->withTo('to@test.com')
    ->withTemplate('templ-1234')
    ->withTemplateVariables(['first_name' => 'Foo']);

邮件也可以接受选项。这些选项取决于你使用的邮件提供商。例如,如果你使用Postmark,支持的选项包括(我们遵循Postmark的命名约定以使其易于理解)

  • 标签
  • 内联CSS
  • 跟踪打开
  • 头部

配置邮件发送器

目前,ZfrMail 提供了与Postmark和Amazon SES的集成。

Postmark

为了配置Postmark,将以下代码添加到你的配置文件中

return [
    'zfr_mail' => [
        'postmark' => [
            'server_token' => 'YOUR_SERVER_TOKEN'
        ]
    ],
];

服务器令牌可以在你的Postmark账户中找到。

Amazon SES

为了配置Amazon SES,将以下代码添加到你的配置文件中

return [
    'aws' => [
        'credentials' => [
            'key' => 'YOUR_AWS_KEY',
            'secret' => 'YOUR_AWS_SECRET'
        ],
        'region' => 'YOUR_AWS_REGION',
        'version' => 'AWS_VERSION' // most of the time 'latest'
    ],
];

你必须添加以下依赖项才能使用Amazon SES

php composer.phar require 'zfr/zfr-aws-utils'
php composer.phar require 'aws/aws-sdk-php:^3.36'

使用邮件发送器

现在,你可以将 ZfrMail\Mailer\PostmarkMailerZfrMail\Mailer\AwsSesMailer 类注入到你的服务中。这些类包含一个单独的 send 方法。邮件发送器将自动为你发送模板邮件或渲染邮件

$mailer->send($mail);

邮件发送器还返回底层平台的邮件ID(如果支持)。这在你需要实现如打开跟踪等特性时很有用,你需要将邮件发送器的邮件ID保存到数据库中

$messageId = $mailer->send($mail);

ZfrMail 是一个轻量级解决方案,具有最小的开销。因此,它不会验证电子邮件地址是否有效,或者你选择的提供商是否正确格式化选项。

待办事项

  • 添加更多提供商
  • 更好的错误支持(目前它将抛出Guzzle异常,但我们可能在将来创建一些预定义的异常,并从中提取Guzzle错误)