yii2-mailqueue
Yii2 mail queue component for yii2-swiftmailer., (*1)
Installation
The preferred way to install this extension is through composer., (*2)
Either run, (*3)
php composer.phar require --prefer-dist tigrov/yii2-mailqueue "*"
or add, (*4)
"tigrov/yii2-mailqueue": "*"
to the require section of your composer.json
file., (*5)
Configuration
Once the extension is installed, add following code to your application configuration:, (*6)
return [
//....
'components' => [
'mailer' => [
'class' => 'tigrov\mailqueue\Mailer',
'table' => '{{%mail_queue}}',
'maxAttempts' => 5,
'attemptIntervals' => [0, 'PT10M', 'PT1H', 'PT6H'],
'removeFailed' => true,
'maxPerPeriod' => 10,
'periodSeconds' => 1,
],
],
];
Following properties are available for customizing the mail queue behavior., (*7)
-
table
name of the database table to store emails added to the queue;
-
maxAttempts
maximum number of sending attempts per email;
-
attemptIntervals
seconds or interval specifications to delay between attempts to send a mail message, see http://php.net/manual/en/dateinterval.construct.php;
-
removeFailed
indicator to remove mail messages which were not sent in maxAttempts
;
-
maxPerPeriod
number of mail messages which could be sent per periodSeconds
;
-
periodSeconds
period in seconds which indicate the time interval for maxPerPeriod
option.
Updating database schema
Run yii migrate
command in command line:, (*8)
php yii migrate/up --migrationPath=@vendor/tigrov/yii2-mailqueue/src/migrations/
Sending the mail queue
To sending mails from the queue call Yii::$app->mailer->sending()
or run the console command yii mailqueue
which can be triggered by a CRON job:, (*9)
* * * * * php /var/www/vhosts/domain.com/yii mailqueue/sending
After the mail message successfully sent it will be deleted from the queue., (*10)
Usage
You can then send a mail to the queue as follows:, (*11)
Yii::$app->mailer->compose('contact/html')
->setFrom('from@domain.com')
->setTo($form->email)
->setSubject($form->subject)
->setTextBody($form->body)
->delay('PT3M') // seconds or an interval specification to delay of sending the mail message, see http://php.net/manual/en/dateinterval.construct.php
->unique('unique key') // a unique key for the mail message, new message with the same key will replace the old one
->queue();
You can still send mails directly with yii2-swiftmailer
:, (*12)
Yii::$app->mailer->compose('contact/html')
->setFrom('from@domain.com')
->setTo($form->email)
->setSubject($form->subject)
->setTextBody($form->body)
->send();
License
MIT, (*13)