使用http://swiftmailer.org时,我可以向邮件队列发送邮件,以便php立即返回,而不是立即发送邮件吗?
答案 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