zfr / zfr-mail
基于常见邮件API的轻量级抽象
Requires
- php: ^7.0
- guzzlehttp/guzzle: ^6.0
- psr/container: ^1.0
Requires (Dev)
- phpunit/phpunit: ^5.2
- squizlabs/php_codesniffer: ^2.3
- zfr/zfr-aws-utils: ^1.1
Suggests
- zfr/zfr-aws-utils: If you need to use Amazon SES
This package is auto-updated.
Last update: 2024-08-29 04:31:05 UTC
README
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\PostmarkMailer
或 ZfrMail\Mailer\AwsSesMailer
类注入到你的服务中。这些类包含一个单独的 send
方法。邮件发送器将自动为你发送模板邮件或渲染邮件
$mailer->send($mail);
邮件发送器还返回底层平台的邮件ID(如果支持)。这在你需要实现如打开跟踪等特性时很有用,你需要将邮件发送器的邮件ID保存到数据库中
$messageId = $mailer->send($mail);
ZfrMail 是一个轻量级解决方案,具有最小的开销。因此,它不会验证电子邮件地址是否有效,或者你选择的提供商是否正确格式化选项。
待办事项
- 添加更多提供商
- 更好的错误支持(目前它将抛出Guzzle异常,但我们可能在将来创建一些预定义的异常,并从中提取Guzzle错误)