我在服务器上制作了一个快速PHP脚本,其中包含对mail()的调用并开始测试它。 html页面总是立即加载,所以我认为这意味着包含对mail()的调用的PHP已经完成执行。但是,邮件()发送的电子邮件只能在通话后每隔10-20分钟收到一次。为何延误? mail()是否会触发外部程序? (如果相关,则会将电子邮件发送到Gmail电子邮件帐户)
答案 0 :(得分:18)
您看到的行为与PHP的mail()
功能无关。相反,它是PHP发送邮件的SMTP邮件服务器,这需要时间来传递。该服务称为a mail transport agent, or MTA。
有很多潜在的原因不能立即交付。可能,您在接收服务器上看到的延迟是greylisting,这意味着接收邮件服务器拒绝接受该消息,直到发送服务器(您的PHP脚本将其发送给它)尝试几次重新发送它。表现良好的MTA将重试失败的发送尝试,但垃圾邮件服务器通常不会,这使得这是一种简单但有效的减少垃圾邮件的方法。
它甚至可以像SMTP服务器上等待发送的长队列消息一样简单,您的排队等待。 (虽然更可能是灰名单)
最重要的是要记住,电子邮件不意图是即时的,因此永远不能保证是即时的。在过去十年左右的时间里,我们已经习惯了很快就能通过电子邮件快速交付,但是你永远不能保证快速交付。
答案 1 :(得分:7)
正如@Michael Berkowski所说,这不是mail()函数本身。 mail()通过调用SMTP快递软件内置的系统来工作。然后,它通过执行必要的DNS查找来自动协商与接收系统的对话,以找到正确的邮件服务器。然后该服务器接收您的消息,通过灰名单和反向DNS查找检查您的系统,扫描并运行它自己的垃圾邮件/病毒防护,然后最终交付。此外,许多邮件服务器延迟了未知的发送服务器,以防止邮件DOS和渔民。