PHP mail()函数延迟

时间:2017-03-16 04:52:28

标签: php

我有一个小型订购服务应用程序,它通过ajax将订单提交给PHP脚本。 当PHP脚本接收到订单时,它会将其放入数据库中,然后发送“确认”。回复客户端的消息,然后向客户发送确认电子邮件,向我发送另一封确认电子邮件。 问题是客户没有看到' OK' (更新浏览器显示)约15秒。如果我评论出电子邮件发送,没有延迟。

... write to database
echo "OK";
mail($semail,'Msg Subject',$message, $header, $bounceto);
mail($semail2,'Msg Subject',$mesage, $header, $bounceto);

消息只有几行。

问题:

  • 调用mail()函数时为什么会出现延迟?
  • 我怎样才能导致' OK'要在不等待PHP脚本完成的情况下发送消息?我猜的是某种冲洗。

2 个答案:

答案 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()函数