xeois / yii2-mailqueue
适用于yii2的邮件队列组件,与yii2-swiftmailer协同工作。
dev-master
2020-02-23 07:42 UTC
Requires
- yiisoft/yii2: *
- yiisoft/yii2-swiftmailer: ~2.1.0
This package is auto-updated.
Last update: 2024-09-29 04:42:35 UTC
README
适用于yii2的邮件队列组件,与 yii2-swiftmailer 协同工作。
安装
通过 composer 安装此扩展是首选方式。
运行
php composer.phar require --prefer-dist xeois/yii2-mailqueue "*"
或添加
"xeois/yii2-mailqueue": "*"
到您的 composer.json
文件的 require 部分。
配置
扩展安装后,将以下代码添加到您的应用程序配置中
return [ //.... 'components' => [ 'mailqueue' => [ 'class' => 'xeois\mailqueue\MailQueue', 'table' => '{{%mail_queue}}', 'mailsPerRound' => 10, 'maxAttempts' => 3, ], ], ];
以下属性可用于自定义邮件队列行为。
table
:存储添加到队列的电子邮件的数据库表名称。mailsPerRound
:每次发送的电子邮件数量。maxAttempts
:每封电子邮件的最大发送尝试次数。
更新数据库模式
应用数据库迁移以创建存储邮件队列消息所需的表。为此,将以下代码添加到 /config/console.php
return [ //.... 'components' => [ 'mailqueue' => [ 'class' => 'xeois\mailqueue\MailQueue', 'table' => '{{%mail_queue}}', ], ], ];
然后,在命令行中运行 yii migrate
命令
php yii migrate/up --migrationPath=@vendor/xeois/yii2-mailqueue/migrations/
处理邮件队列
现在调用 process()
作用于 Yii::$app->mailqueue
将处理消息队列并发送电子邮件。在您的控制器操作之一中
public function actionSend() { Yii::$app->mailqueue->process(); }
最好是控制台命令(例如:mail/send),这可以通过 CRON 任务触发。
设置 CRON 任务
设置运行控制台命令的 CRON 任务
*/10 * * * * php /var/www/html/myapp/yii mailqueue/process
用法
您可以通过以下方式向队列发送电子邮件
Yii::$app->mailqueue->compose('contact/html') ->setFrom('from@domain.com') ->setTo($form->email) ->setSubject($form->subject) ->setTextBody($form->body) ->queue();
虽然 xeois\mailqueue\MailQueue
继承自 yii\swiftmailer\Mailer
,但您可以通过将 yii2-swiftmailer
配置直接添加到 mailqueue
配置中来替换此扩展,如下所示
return [ //.... 'components' => [ 'mailqueue' => [ 'class' => 'xeois\mailqueue\MailQueue', 'table' => '{{%mail_queue}}', 'mailsPerRound' => 10, 'maxAttempts' => 3, 'transport' => [ 'class' => 'Swift_SmtpTransport', 'host' => 'localhost', 'username' => 'username', 'password' => 'password', 'port' => '587', 'encryption' => 'tls', ], ], ], ];
并且使用以下代码直接发送电子邮件,就像您通常使用 yii2-swiftmailer
一样,并将其添加到数据库中以便于参考
Yii::$app->mailqueue->compose('contact/html') ->setFrom('from@domain.com') ->setTo($form->email) ->setSubject($form->subject) ->setTextBody($form->body) ->send();
许可证
yii2-mailqueue
nterms/yii2-mailque 的增强版本,用于发送和队列。适用于yii2的邮件队列组件,与yii2-swiftmailer协同工作。