tigrov / yii2-mailqueue
Yii2 mail queue component for yii2-swiftmailer.
Installs: 4 288
Dependents: 0
Suggesters: 0
Security: 0
Stars: 15
Watchers: 3
Forks: 4
Open Issues: 1
Type:yii2-extension
Requires
- yiisoft/yii2: ~2.0.0
- yiisoft/yii2-swiftmailer: ~2.1.0
README
Yii2 mail queue component for yii2-symfonymailer.
Limitation
Since 1.1.6 requires PHP >= 8.1
Installation
The preferred way to install this extension is through composer.
Either run
php composer.phar require --prefer-dist tigrov/yii2-mailqueue "~1.1.1"
or add
"tigrov/yii2-mailqueue": "~1.1.6"
to the require section of your composer.json
file.
Configuration
Once the extension is installed, add following code to your application configuration:
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.
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 inmaxAttempts
;maxPerPeriod
number of mail messages which could be sent perperiodSeconds
;periodSeconds
period in seconds which indicate the time interval formaxPerPeriod
option.
Updating database schema
Run yii migrate
command in command line:
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:
* * * * * php /var/www/vhosts/domain.com/yii mailqueue/sending
After the mail message successfully sent it will be deleted from the queue.
Usage
You can then send a mail to the queue as follows:
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
:
Yii::$app->mailer->compose('contact/html') ->setFrom('from@domain.com') ->setTo($form->email) ->setSubject($form->subject) ->setTextBody($form->body) ->send();