我有一个小型订购服务应用程序,它通过ajax将订单提交给PHP脚本。 当PHP脚本接收到订单时,它会将其放入数据库中,然后发送“确认”。回复客户端的消息,然后向客户发送确认电子邮件,向我发送另一封确认电子邮件。 问题是客户没有看到' OK' (更新浏览器显示)约15秒。如果我评论出电子邮件发送,没有延迟。
... write to database
echo "OK";
mail($semail,'Msg Subject',$message, $header, $bounceto);
mail($semail2,'Msg Subject',$mesage, $header, $bounceto);
消息只有几行。
问题:
答案 0 :(得分:2)
那是因为http://php.net/manual/en/function.mail.php返回成功或失败的布尔值,而您的邮件服务器需要时间来处理电子邮件请求。
您可以为电子邮件实施某种MYSQL队列,您可以在其中发送电子邮件并使用后台任务进行检查(例如使用CRON来查看YourMailQueueProcessingScripts.php
,以检查是否有任何内容发送和执行发送操作的电子邮件 - 请记住,您最多每分钟运行一次CRON,我不知道您是否可以接受发送电子邮件1分钟的延迟)
答案 1 :(得分:0)
它应该适用于 fastcgi-finish-request.php 但它需要 PHP FPM
添加这个会将缓冲区输出给用户并切断连接,脚本的其余部分仍然会被执行,但不会发送额外的输出,所以在调用 fastcgi_finish_request()
和此后mail()
函数