floor12 / yii2-module-mailing
为yii2项目提供的邮件模块。
Requires
Requires (Dev)
- phpunit/phpunit: 4.*
README
本模块用于发送大量邮件(包括应用程序用户和任意列表)。它跟踪已打开的邮件(如果启用了图像加载),还跟踪邮件中的打开链接。
邮件发送可能通过以下方式实现:
- 直接在创建邮件时输入的任意电子邮件地址列表;
- 预先构建的列表(可以在模块管理界面中构建,但通常更方便动态自行构建);
- 从应用程序的ActiveRecord模型中提取地址。
安装
安装模块
执行命令
$ composer require floor12/yii2-module-mailing
或添加到composer.json文件的"required"部分
"floor12/yii2-module-mailing" : "*"
执行迁移以创建所需表
$ ./yii migrate --migrationPath=@vendor/floor12/yii2-module-mailing/src/migrations/
如果之前未安装本模块依赖的floor12\files\Module模块,则创建@app/storage
文件夹,并赋予Web服务器写入权限,然后执行模块文件的迁移
$ ./yii migrate --migrationPath=@vendor/floor12/yii2-module-files/src/migrations/
将模块添加到应用程序配置中(如果之前未安装,还应添加floor12/yii2-module-files
模块)
'modules' => [ 'mailing' => [ 'class' => 'floor12\mailing\Module', 'editRole' => 'admin', 'layout' => '@app/views/layouts/columns', 'fromEmail' => 'no-reply@example.com', 'fromName' => 'Служба рассылок сайта example.com', 'htmlTemplate' => 'mailing-main', 'domain' => 'https://aexample.com', 'linkedModels' => [ \common\models\User::class, \common\models\Clients::class, ] ], 'files' => [ 'class' => 'floor12\files\Module', ], ], ...
参数:
-
editRole
- 具有访问模块管理控制器权限的用户角色。 -
layout
- 在模块管理界面中需要使用的布局别名。 -
fromEmail
- 发送邮件的电子邮件地址。 -
fromName
- 邮件发送者姓名。 -
htmlTemplate
- 项目中用于邮件的模板名称。 -
domain
- 由于队列通过控制台启动,而控制台不了解网站域名,因此请指定应用程序域名,以便跟踪打开的邮件和链接。 -
linkedModels
- ActiveRecord类数组,需要从中获取收件人地址。这些类应实现floor12\mailing\interfaces\MailingRecipientInterface
。 -
unsubscribeRoute
- 到取消订阅操作的路径(用户会被标记为已取消订阅),通常不需要修改。
启动队列
要启动队列,需要执行命令
$./yii mailing/queue
建议将其添加到cron中,每15分钟运行一次。
使用方法
模块管理界面可通过地址 https://example.com/mailing
访问。
在编辑邮件发送时,如果模块配置中指定了linkedModels
数组中的任何类,则Select2选择器将自动生成这些类对象的选择组件。以下是一个使用common\models\User
类的示例。
在图像示例中,类 User
实现了 floor12\mailing\interfaces\MailingRecipientInterface
,如下所示,因此,在表单中会生成“用户”字段。
class User extends MyActiveRecord implements IdentityInterface, MailingRecipientInterface { public static function getMailingList(): array { return self::find()->select('fullname')->indexBy('id')->column(); } public static function getMailingLabel(): string { return "Пользователи"; } public function getMailingEmail(): string { return $this->email; } ...
其他详细信息可以在源代码中找到。