dev-master
9999999-dev https://github.com/mhussain001/yii2-mailqueueEmail queue component for yii2 that works with yii2-swiftmailer.
MIT
The Requires
component email extension yii2 swiftmailer queue yii2-swiftmailer
Email queue component for yii2 that works with yii2-swiftmailer.
Email queue component for yii2 that works with yii2-swiftmailer, (*1)
The preferred way to install this extension is through composer., (*2)
Either run, (*3)
php composer.phar require --prefer-dist mhussain001/yii2-mailqueue "*"
or add, (*4)
"mhussain001/yii2-mailqueue": "*"
to the require section of your composer.json
file., (*5)
Once the extension is installed, add following code to your application configuration :, (*6)
return [ //.... 'components' => [ 'mailqueue' => [ 'class' => 'mhussain001\mailqueue\MailQueue', 'table' => '{{%mail_queue}}', 'mailsPerRound' => 10, 'maxAttempts' => 3, ], ], ];
Following properties are available for customizing the mail queue behavior., (*7)
table
: Name of the database table to store emails added to the queue.mailsPerRound
: Number of emails to send at a time.maxAttempts
: Maximum number of sending attempts per email.Apply the database migration to create the table required to store the mail queue messages. To do this,
add following code to /config/console.php
:, (*8)
return [ //.... 'components' => [ 'mailqueue' => [ 'class' => 'mhussain001\mailqueue\MailQueue', 'table' => '{{%mail_queue}}', ], ], ];
then run yii migrate
command in command line:, (*9)
php yii migrate/up --migrationPath=@vendor/mhussain001/yii2-mailqueue/migrations/
Now calling process()
on Yii::$app->mailqueue
will process the message queue and send out the emails.
In one of your controller actions:, (*10)
public function actionSend() { Yii::$app->mailqueue->process(); }
Most preferably this could be a console command (eg: mail/send) which can be triggered by a CRON job., (*11)
Set a CRON job to run console command:, (*12)
*/10 * * * * php /var/www/html/myapp/yii mailqueue/process
You can then send an email to the queue as follows:, (*13)
Yii::$app->mailqueue->compose('contact/html') ->setFrom('from@domain.com') ->setTo($form->email) ->setSubject($form->subject) ->setTextBody($form->body) ->queue();
While mhussain001\mailqueue\MailQueue
extends from yii\swiftmailer\Mailer
, you can replace it with this extension by adding
yii2-swiftmailer
configuations directly to mailqueue
configurations as follows:, (*14)
return [ //.... 'components' => [ 'mailqueue' => [ 'class' => 'mhussain001\mailqueue\MailQueue', 'table' => '{{%mail_queue}}', 'mailsPerRound' => 10, 'maxAttempts' => 3, 'transport' => [ 'class' => 'Swift_SmtpTransport', 'host' => 'localhost', 'username' => 'username', 'password' => 'password', 'port' => '587', 'encryption' => 'tls', ], ], ], ];
And use following code for directly sending emails as you ususally do with yii2-swiftmailer
and also add to db for reference:, (*15)
Yii::$app->mailqueue->compose('contact/html') ->setFrom('from@domain.com') ->setTo($form->email) ->setSubject($form->subject) ->setTextBody($form->body) ->send();
MIT, (*16)
Email queue component for yii2 that works with yii2-swiftmailer.
MIT
component email extension yii2 swiftmailer queue yii2-swiftmailer