simialbi / yii2-mandrill
Yii2的Mandrill API集成
Requires
- php: >=8.0
- ext-fileinfo: *
- yiisoft/yii2: ~2.0
- yiisoft/yii2-httpclient: ^2.0.0
Requires (Dev)
Replaces
- nickcv/yii2-mandrill: 1.* | 2.*
README
变更日志
从版本1.6.1开始,方法nickcv\mandrill\Message::setHtmlBody
和nickcv\mandrill\Message::setSubject
不再自动净化/编码数据。
这样做是为了给开发者提供更大的灵活性,请参阅问题#16和#19。
安装
安装此扩展的首选方式是通过composer。
运行
php composer.phar require --prefer-dist nickcv/yii2-mandrill "*"
或在您的composer.json
文件的require部分中添加
"nickcv/yii2-mandrill": "*"
。
设置
最近Mandrill成为MailChilmp服务的一部分:要使用Mandrill,您需要有一个MailChimp账户。
有关定价详情,请查看他们的网站。
一旦您有了账户,您需要创建一个API密钥。您可以根据需要创建任意数量的API密钥,并建议为每个网站创建一个。您还可以创建测试API密钥。使用测试API密钥提交的每封电子邮件实际上都不会被提交,但您可以在测试仪表板中检查测试是否成功。
Mandrill将跟踪您提交的每封电子邮件。您可以使用标签来筛选数据,并且您还可以检查每封电子邮件被打开的次数以及其中的链接是否被点击。
使用
安装扩展后,更改您的应用程序配置文件web.php
首先,您需要添加一个应用程序名称
。默认情况下,此扩展将使用应用程序名称作为发件人名称,并使用params.php
中的adminEmail
参数作为发件人电子邮件。
[ 'id' => 'basic', 'name' => 'Application Name', ]
return [ 'adminEmail' => 'admin@example.com', ];
然后,您需要添加组件
'mailer' => [ 'class' => 'nickcv\mandrill\Mailer', 'apikey' => 'YourApiKey', ],
从现在起,您可以使用mandrill邮件发送器,就像您以前使用默认的邮件发送器一样。
\Yii::$app->mailer ->compose('mailViewName', ['model' => $model]) ->setTo('email@email.com') ->send();
Mandrill模板
如果您想使用Mandrill的模板系统,只需在组件配置中将useMandrillTemplates
属性设置为true即可
'mailer' => [
'class' => 'nickcv\mandrill\Mailer',
'apikey' => 'YourApiKey',
'useMandrillTemplates' => true,
],
如果您启用此功能,组件将查找与构建方法的视图参数同名名为mandrill的模板。
自1.3.0版本起,组件将停止回退到渲染内部视图。这个更改是因为现在将使用Mandrill的send-template方法,避免了启用模板时进行两次API调用。
自1.4.0版本起,当使用Mandrill模板时,组件不会默认使用应用程序名称和管理员电子邮件。这样做是为了允许使用Mandrill的模板默认值。
要覆盖此行为,您可以在组件配置中将useTemplateDefaults
属性设置为false
'mailer' => [ 'class' => 'nickcv\mandrill\Mailer', 'apikey' => 'YourApiKey', 'useMandrillTemplates' => true, 'useTemplateDefaults' => false, ],
自1.5.0版本起,组件具有一个可配置属性templateLanguage
,可以包含'mailchimp'或'handlebars'(默认为'mailchimp')。
有关handlebars使用的更多信息,请查看这些链接
您可以通过编辑组件配置中的templateLanguage
属性来更改首选语言
'mailer' => [ 'class' => 'nickcv\mandrill\Mailer', 'apikey' => 'YourApiKey', 'useMandrillTemplates' => true, 'templateLanguage' => nickcv\mandrill\Mailer::LANGUAGE_HANDLEBARS, ],
其他方法
Mandrill允许您设置标签。方法\nickcv\mandrill\Message::setTags($tags)
接受字符串或字符串数组作为参数
\Yii::$app->mailer ->compose('mailViewName', ['model' => $model]) ->setTags(['registration']);
自1.3.0版本起,还可能启用异步模式。使用异步模式时,Mandrill将排队消息并分批发送。如果您向超过10个电子邮件地址发送消息,将自动使用异步模式。
\Yii::$app->mailer ->compose('mailViewName', ['model' => $model]) ->enableAsync();
自1.4.0版本起,还可以使用全局合并变量。这些变量将由Mandrill用来替换占位符。当处理模板时,这特别有用。
自1.6.0版本起,您可以通过调用Mailer::getMandrill
方法来获取组件使用的Mandrill对象。
有关更多信息,请查看组件文档。
自1.7.0版本起,还可以启用/禁用消息点击/打开跟踪,并决定消息是否为优先级消息。
您还可以使用Mailer::getLastTransaction
方法检索Mandrill返回的完整响应正文。
使用merge_vars通过Mandrill模板发送多个电子邮件
您可以考虑使用此方法使用Mandrill模板并根据您的数据更改变量
\Yii::$app->mailer ->compose($stringTemplate) ->setTo($arrayTo) ->setGlobalMergeVars($arrayGolbalMergeVars) ->setMergeVars($arrayMergeVars) ->send();
单元测试
包中的所有类都已进行单元测试。测试包含在包中。
如果您想运行测试,请按照Yii2文档安装phpunit。
测试使用开发者的Mandrill测试API密钥,该密钥仅针对开发者的IP地址进行了白名单。
日志
组件自动将每条通过Mandrill发送的消息记录在“mandrill”类别中。
成功发送的消息使用\Yii::info()
记录,被拒绝或无效的消息使用\Yii::warning()
记录,Mandrill类抛出的所有异常使用\Yii::error()
记录。
如果您使用Mandrill模板且找不到模板,则错误将使用Yii::info()
记录。