Allows in-app mail queueing and delayed sending.
composer:
composer require adt/mail-queueconfig.neon:
extensions:
adtMailQueue: ADT\MailQueue\DI\MailQueueExtensionLet Doctrine know about our entity:
doctrine:
metadata:
ADT\MailQueue\Entity: %vendorDir%/adt/mail-queue/src/EntityCreate 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\QueueEntityTo 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: @sparkPostApiMailerServiceIf 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: @queueMailerMessengerClear your temp/cache directory.
Generate migration and migrate:
php www/index.php migrations:diff
php www/index.php migrations:migrateUse predefined console command:
php www/index.php mail-queue:processor 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::handlerMethodHandler method receives queue entry entity and exception generated on send.
If you need notification when queue is drained, you can set:
adtMailQueue:
onQueueDrained: @EventHandlerClass::handlerMethodEvent 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%
backgroundQueueService: @ADT\BackgroundQueue\Service
backgroundQueueCallbackName: mailSending