慢邮件()函数解决方法

时间:2011-11-01 15:20:19

标签: php ajax

我有一个php脚本,如果他的购买成功,会向用户发送邮件。问题是由于mail()导致页面加载缓慢。我知道有一些方法可以将邮件放在数据库表中,然后使用cron作业发送它们,但购买频率可能很高,我希望邮件立即发送,这样看起来不太好选项。

购买请求由他购买的同一页面处理,他只能这样做一次。除购买详细信息外,用户不控制邮件的任何部分。我想使用Ajax,脚本会将数据发送到客户端并调用ajax函数,然后调用另一个邮件脚本,但这会让用户知道发送的内容并且可以被篡改。有没有其他方法我可以安全地使用Ajax而不让用户知道什么是发送和在哪里?还有更好的解决方法吗?

2 个答案:

答案 0 :(得分:4)

在邮件服务器排队时,

mail()应该立即返回,这通常应该没有时间,所以我认为你的问题绝对是邮件服务器,而不是你的PHP。我猜你正在提交的邮件服务器正在运行一些反垃圾邮件检查,比如反向DNS查询。它也可能会根据使用情况限制您。您可以尝试通过其他邮件服务器进行验证吗?

此外,如果您有shell访问权限,请尝试从shell发送消息(例如,echo test | mail -v -s test me@whatever.com)以查看它正在做什么以及需要多长时间。

编辑:刚刚注意到您的评论:Windows。在这种情况下,至少你可以尝试从PHP服务器telnet到邮件主机上的端口25,看看连接和获取220问候标题需要多长时间。 (我打赌你会立即联系,但暂时不会获得220标题。)

答案 1 :(得分:0)

你正确的想法。这是我在这种情况下会做的事情:

  1. 用户进行购买(除非您想要此处,否则不是ajax)
  2. 在处理购买时,电子邮件被插入电子邮件表格中,其中包含“id”& “发送”栏加上所有其他内容。
  3. 用户进入成功页面
  4. 成功页面在后台启动ajax以从db发送带有该ID的电子邮件 - 并且不关心结果
  5. 负责发送电子邮件的php页面会发送电子邮件并标记已发送的列
  6. 如果某人使用未发送的ID拨打您的数据库,那么该电子邮件无论如何都需要发送,所以没关系。如果id不匹配或发送的列标记为true,则可以忽略它。不用担心人们试图使用您的系统发送垃圾邮件。