xeois/yii2-mailqueue

适用于yii2的邮件队列组件,与yii2-swiftmailer协同工作。

安装: 155

依赖者: 0

建议者: 0

安全: 0

星星: 0

关注者: 3

分支: 1

开放问题: 0

类型:yii2-extension

dev-master 2020-02-23 07:42 UTC

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();

许可证

MIT

yii2-mailqueue

nterms/yii2-mailque 的增强版本,用于发送和队列。适用于yii2的邮件队列组件,与yii2-swiftmailer协同工作。