thinker-g/yii2-hermes-mailing

为 yii2.0 提供的高度可配置的多进程邮件解决方案(控制台命令)。

安装: 125

依赖项: 0

建议者: 0

安全: 0

星标: 17

关注者: 6

分支: 9

开放问题: 0

类型:yii2-extension

v1.0.0 2015-05-08 07:12 UTC

This package is not auto-updated.

Last update: 2024-09-25 14:46:59 UTC


README

为 yii2.0 提供的高度可配置的多进程邮件解决方案(控制台命令)。

Latest Stable Version Total Downloads License Powered by Yii 2.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 是一个用于测试性能和调整参数的辅助选项。当它被启用时,真正的“发送”操作将随机返回 truefalse。除此之外,所有其他操作都将正常执行。

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等)
  • 处理事件

请暂时阅读代码中的属性注释以了解它们的使用方法。

联系我

jiyan.guo@gmail.com