Свифт Мейлер отправить в очередь для последующей доставки

При использовании http://swiftmailer.org/ могу ли я отправить сообщение в почтовую очередь, чтобы php сразу же вернулся, а не отправлял сообщение прямо сейчас?

3 ответа

Это старый вопрос, но так как он появился в моем поиске в Google, я отвечу на него тем, что выяснил.

ДА! Swiftmailer имеет возможность писать в спул вместо отправки сразу. Реализация довольно проста:

$spool = new Swift_FileSpool('/where/you/want/your/spool');
$transport = Swift_SpoolTransport::newInstance($spool);
$mailer = Swift_Mailer::newInstance($transport);

Это говорит swiftmailer записывать сообщения на диск, а не отправлять их. Затем с помощью задания cron или другого триггера отправьте сообщения, используя что-то вроде:

$spool = new Swift_FileSpool('/where/you/put/your/spool');
$spool_transport = Swift_SpoolTransport::newInstance($spool);

// Create the smtp transport.

$smtp_transport = Swift_SmtpTransport::newInstance('your.smtp.host', 25);

// Get the messages from the spool
$spool = $spool_transport->getSpool();

// Send the messages via the real transport.
$sent = $spool->flushQueue($smtp_transport);

Ты не можешь swiftmailer/php на самом деле не доставляет почту для вас, она просто передает ее на SMTP-сервер, и этот сервер выполняет доставку для вас. Вы должны указать SMTP не обрабатывать исходящую очередь, чтобы "остановить" доставку.

С точки зрения реального мира, swift/php просто зайдите в угол и бросьте конверт в почтовый ящик. Почтовый грузовик обнаруживается сразу после этого и запускает процесс отправки почты по пути через почтовую систему. Но это полностью выходит за рамки PHP.

Если вы используете транспорт sendmail, он должен сразу вернуться.

С https://github.com/swiftmailer/swiftmailer/blob/4.1/doc/sending.rst:

Обычно процесс sendmail реагирует быстро, так как перед отправкой отправляет ваши сообщения на диск.

Вы также можете взглянуть на спулинг: http://symfony.com/doc/current/cookbook/email/spool.html

Другие вопросы по тегам