Allows in-app mail queueing and delayed sending.
composer:
composer require adt/mail-queue
config.neon:
extensions:
adtMailQueue: ADT\MailQueue\DI\MailQueueExtension
Let Doctrine know about our entity:
doctrine:
metadata:
ADT\MailQueue\Entity: %vendorDir%/adt/mail-queue/src/Entity
Create your own entity that extends our abstract entity:
namespace App\Model\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
*/
class QueueEntity extends \ADT\MailQueue\Entity\AbstractMailQueueEntry {
/**
* @ORM\Column(type="text")
*/
protected $customProperty;
}
Let us know about your custom entity:
adtMailQueue:
queueEntityClass: App\Model\Entity\QueueEntity
To fill custom properties of your entity when enqueueing mail,
you can use second argument of enqueue
:
$this->mailQueueService->enqueue($mail, [
'customProperty' => 'customValue'
]);
or
$this->mailQueueService->enqueue($mail, function (QueueEntity $e) {
$e->customProperty = 'customValue';
});
adtMailQueue:
mailer: @sparkPostApiMailerService
If you need to decide which mailer you want to use based on information
in your custom Queue entity, you can implement ADT\MailQueue\Service\IMessenger
interface. This interface has send($entity)
method where $entity
is your custom entity.
adtMailQueue:
messenger: @queueMailerMessenger
Clear your temp/cache
directory.
Generate migration and migrate:
php www/index.php migrations:diff
php www/index.php migrations:migrate
Use predefined console command:
php www/index.php mail-queue:process
or get ADT\MailQueue\Services\QueueService
from DI container and call:
$queueService->process()
If you need to handle send error, you can set:
adtMailQueue:
sendErrorHandler: @ErrorHandlerClass::handlerMethod
Handler method receives queue entry entity and exception generated on send.
If you need notification when queue is drained, you can set:
adtMailQueue:
onQueueDrained: @EventHandlerClass::handlerMethod
Event handler receives instance of OutputInterface
if available, NULL
otherwise.
adtMailQueue:
messenger: #or mailer
queueEntityClass: #default Entity\MailQueueEntry::class,
autowireMailer: false
sendErrorHandler: null
onQueueDrained: null
lockTimeout: 600
limit: 1000 #how many emails send
tempDir: %tempDir%