Yii Mail Queue
, (*1)
Mail queue for emails. You don't need think how many emails will be send, because
when you install this extension you can setting this. You will have table, where you
can see emails status., (*2)
The preferred way to install this extension is through composer., (*3)
Either run, (*4)
php composer.phar require --prefer-dist yiicod/yii2-mailqueue "*"
or add, (*5)
"yiicod/yii2-mailqueue": "*"
to the require section of your composer.json., (*6)
run, (*7)
php yii migrate/up --migrationPath=@vendor/yiicod/yii2-mailqueue/migrations
Please note that messages are wrapped with Yii::t()
to support message translations, you should define default message source for them if you don't use i18n., (*8)
'i18n' => [
'translations' => [
'*' => [
'class' => 'yii\i18n\PhpMessageSource'
],
],
],
Config
Use pm2(http://pm2.keymetrics.io/) as daemons manager., (*9)
'components' => [
'mailqueue' => [
'class' => 'yiicod\mailqueue\WorkerCommand',
],
]
...
'bootstrap' => array('mailqueue')
Full config you can find in the yiicod\mailqueue\config., (*10)
Console command
'commandMap' => [
'mail-queue' => [
'class' => 'yiicod\mailqueue\commands\MailQueueCommand',
],
],
OR use pm2(http://pm2.keymetrics.io/). This variant more preferable.
'commandMap' => [
'mail-queue' => [
'class' => 'yiicod\mailqueue\commands\WorkerCommand',
],
],
pm2 config:
{
"apps": [
{
"name": "job-queue",
"script": "yii",
"args": [
"mailqueue/work"
],
"exec_interpreter": "php",
"exec_mode": "fork_mode",
"max_memory_restart": "1G",
"watch": false,
"merge_logs": true,
"out_file": "runtime/logs/job_queue.log",
"error_file": "runtime/logs/job_queue.log"
}
]
}
Run PM2 daemons
pm2 start daemons-app.json
Migration usage
Migration command or use manual(http://www.yiiframework.com/doc-2.0/guide-db-migrations.html) for configuration:, (*11)
yii migrate --migrationPath=@yiicod/mailqueue/migrations
Push in queue
/**
* Add mail from queue
* @param string $to Email to
* @param string $subject Email subject
* @param string $body email, html
* @param string|Array $from From email
* @param string $attachs Attach for email array('path' => 'file path', 'name' => 'file bname')
* @param Array $additionalFields Any additional fields
*/
Yii::app()->mailQueue->push($to, $subject, $body, $from = '', array $attachs = [], $additionalFields = []);
or, (*12)
/**
* Push mass
* array(
* array(
* 'field name to' => '',
* 'field name subject' => '',
* 'field name body' => '',
* 'field name priority' => '',
* 'field name from' => '',
* 'field name attachs' => '',
* )
* )
* @param Array $data
* @return int Return int
*/
Yii::app()->mailQueue->pushMass($data)