swift mailer发送到队列以便以后发送

时间:2012-01-27 20:26:34

标签: php email swiftmailer

使用http://swiftmailer.org时,我可以向邮件队列发送邮件,以便php立即返回,而不是立即发送邮件吗?

3 个答案:

答案 0 :(得分:6)

这是一个老问题,但由于它出现在我的谷歌搜索中,我会用我想出的答案回答它。

YES! 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);

答案 1 :(得分:1)

你做不到。 swiftmailer / php实际上并没有为你发送邮件,只是将它交给SMTP服务器,然后服务器就为你做了送货。您需要告诉SMTP不要处理传出队列以“停止”传递。

在现实世界中,swift / php只是走到角落,把信封放在邮箱里。邮政卡车随后立即出现并开始通过邮政系统发送邮件的过程。但这完全超出了PHP的范围。

答案 2 :(得分:0)

如果您使用的是sendmail传输,则应立即返回。

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

  

通常,sendmail进程会在您调整时快速响应   在发送之前将消息发送到磁盘。

您还可以查看假脱机:http://symfony.com/doc/current/cookbook/email/spool.html