thinker-g/yii2-hermes-mailing
为 yii2.0 提供的高度可配置的多进程邮件解决方案(控制台命令)。
Requires
This package is not auto-updated.
Last update: 2024-09-25 14:46:59 UTC
README
为 yii2.0 提供的高度可配置的多进程邮件解决方案(控制台命令)。
安装
1. 下载
安装此扩展的最佳方式是通过 composer。
可以运行
php composer.phar require --prefer-dist thinker-g/yii2-hermes-mailing:dev-master
或添加
"thinker-g/yii2-hermes-mailing": "dev-master"
到您的 composer.json
文件的 require 部分。
您也可以直接从 GitHub 项目页面 下载。如果这样做,您将需要设置别名目录 @thinker_g/HermesMailing
。以下是一个示例。
在 config/main.php 中,假设您将 yii2-hermes-mailing
文件夹放在您的项目的 extensions/
目录下
return [ 'id' => 'app-console', ... 'aliases' => [ '@thinker_g/HermesMailing' => '@app/extensions/yii2-hermes-mailing', ... ], ... ];
在这个示例中,@app
是应用的根别名,它将被其真实路径替换。在一个高级模板中,它可能是 '@common', '@frontend', '@backend'。
2. 安装
a) 配置
编辑您的控制台应用的配置文件(默认为 console/config/main.php
/ config/console.php
)以挂载控制台命令控制器。
return [ 'id' => 'app-console', ... 'controllerMap' => [ 'email' => [ 'class' => 'thinker_g\HermesMailing\console\DefaultController', 'modelClass' => 'common\models\HermesMail', 'installerMode' => true, 'testMode' => true ], ... ], ... ];
请注意,modelClass
将由命令稍后用于生成 AR 模型,其默认值为 app\\models\\HermesMail
。如果您使用的是基本的 yii2.0 模板或只想将模型保持在控制台应用的模型目录中,则不需要指定 modelClass
。我们假设我们使用的是默认的高级 yii2.0 模板。当然,您可以根据需要指定任何模型名称。
将 installerMode
设置为 true 将启用一些仅在安装期间使用的辅助操作。当命令准备就绪时,应将其设置为 false(或删除,因为默认为 false)。
testMode
是一个用于测试性能和调整参数的辅助选项。当它被启用时,真正的“发送”操作将随机返回 true 或 false。除此之外,所有其他操作都将正常执行。
b) 初始化(创建数据库表和生成 AR 模型)
确保您的 'db' 应用组件正在运行,然后我们可以发出以下命令来初始化命令。默认的初始化将创建一个名为 hermes_mail
的表以及相应的 AR 模型,其名称如上所述。
user@localhost:~/ws/advanced$ ./yii email/install
如果命令安装成功并且准备就绪,您应该会看到以下内容。
user@localhost:~/ws/advanced$ ./yii email/install Create table hermes_mail? (yes|no) [no]:y Migrating database... > create table hermes_mail ... done (time: 0.065s) Running 'Model Generator'... The following files will be generated: [new] /home/admin/ws/advanced/common/models/HermesMail.php Ready to generate the selected files? (yes|no) [yes]:y Files were generated successfully! Generating code using template "/home/admin/ws/advanced/vendor/yiisoft/yii2-gii/generators/ model/default"... generated /home/admin/ws/advanced/common/models/HermesMail.php done! Install complete! user@localhost:~/ws/advanced$
c) 填充一些测试数据
到目前为止,您的程序已准备好。您可以在代码的任何地方使用生成的 AR 模型,将电子邮件插入队列。为了方便测试,您可以使用 email/fill4test
命令为测试准备(插入)1000 封电子邮件。
user@localhost:~/ws/advanced$ ./yii help email/fill4test DESCRIPTION Run to insert a certain number of test email entries. USAGE yii email/fill4test [insertCount] [from] [to] [...options...] - insertCount: int (defaults to 1000) Number of emails to insert. - from: string (defaults to 'from_{seq}@example.com') From address where the token "{seq}" will be replaced by the sequence number. - to: string (defaults to 'to_{seq}@example.com') To address where the token "{seq}" will be replaced by the sequence number.
假设我们想试500封
user@localhost:~/ws/advanced$ ./yii email/fill4test 500
An example email has been appended to the email queue. ID: 1.
An example email has been appended to the email queue. ID: 2.
...
An example email has been appended to the email queue. ID: 500.
===================================================================== 100%
500 mails inserted.
现在让我们开始运行一些实际的操作。
用法
起飞前检查
*** 注意!请在运行测试之前检查以下项。这将确保您插入的电子邮件不会被发送出去。 ***
- InstallerMode 已关闭。 (
installerMode
=> false) - Test mode 已开启。 (
testMode
=> true) - 您的 "mailer" 应用组件正在运行。
一旦扩展安装完毕,您只需在代码中按以下方式使用它:
user@localhost:~/ws/advanced$ ./yii email/send-queue [2015-03-20 09:54:49] Emailing process (server id: 0) started. [2015-03-20 09:54:49] Signed 100 entries with signature: 89f0bc811b35b23e888674875a630e42. [2015-03-20 09:54:52] 100 emails processed by signature: 89f0bc811b35b23e888674875a630e42. [2015-03-20 09:54:52] Signed 100 entries with signature: 89f0bc811b35b23e888674875a630e42. [2015-03-20 09:54:55] 100 emails processed by signature: 89f0bc811b35b23e888674875a630e42. [2015-03-20 09:54:55] Signed 100 entries with signature: 89f0bc811b35b23e888674875a630e42. [2015-03-20 09:54:57] 100 emails processed by signature: 89f0bc811b35b23e888674875a630e42. [2015-03-20 09:54:57] Signed 100 entries with signature: 89f0bc811b35b23e888674875a630e42. [2015-03-20 09:55:01] 100 emails processed by signature: 89f0bc811b35b23e888674875a630e42. [2015-03-20 09:55:01] Signed 100 entries with signature: 89f0bc811b35b23e888674875a630e42. [2015-03-20 09:55:04] 100 emails processed by signature: 89f0bc811b35b23e888674875a630e42. [2015-03-20 09:55:04] Emailing process (server id: 0) stopped. user@localhost:~/ws/advanced$
如果您看到一些类似以下输出,则表示您的命令正在正常工作。您可以通过配置 crontab 进行部署。
CRONTAB
请务必在设置真实邮件发送的crontab之前禁用testMode
。以下是针对webmaster用户的crontab设置示例。
================== hermes mailing ================== * * * * * sleep 0;/home/webmaster/yii2Adv/yii email/send-queue >> /home/webmaster/yii2adv/console/logs/send-queue-0 * * * * * sleep 10;/home/webmaster/yii2Adv/yii email/send-queue >> /home/webmaster/yii2adv/console/logs/send-queue-1 * * * * * sleep 20;/home/webmaster/yii2Adv/yii email/send-queue >> /home/webmaster/yii2adv/console/logs/send-queue-2 * * * * * sleep 30;/home/webmaster/yii2Adv/yii email/send-queue >> /home/webmaster/yii2adv/console/logs/send-queue-3 * * * * * sleep 40;/home/webmaster/yii2Adv/yii email/send-queue >> /home/webmaster/yii2adv/console/logs/send-queue-4 * * * * * sleep 50;/home/webmaster/yii2Adv/yii email/send-queue >> /home/webmaster/yii2adv/console/logs/send-queue-5 ================== hermes mailing ==================
此设置将每10秒启动一个新的邮件发送进程,直到队列中的所有邮件都发送完毕,每个进程将并行工作。
高级配置
正在开发中,即将推出!
这部分将涵盖一系列有趣的功能。
- 发送控制(间接控制内存消耗和执行时间)
- 分布式部署
- 使用专用电子邮件数据库服务
- 遵守垃圾邮件规则
- 自定义(替换邮件发送程序、AR等)
- 处理事件
请暂时阅读代码中的属性注释以了解它们的使用方法。