Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Slow mail()函数的解决方法_Php_Ajax - Fatal编程技术网

Php Slow mail()函数的解决方法

Php Slow mail()函数的解决方法,php,ajax,Php,Ajax,我有一个php脚本,如果用户购买成功,它会向用户发送一封邮件。问题是,由于邮件,页面加载速度较慢。我知道有很多方法,比如将邮件放入数据库表,然后使用cron作业发送邮件,但购买频率可能很高,我希望立即发送邮件,所以这看起来不是一个好的选择 购买请求由他购买的同一页面处理,他只能这样做一次。除购买详细信息外,用户不控制邮件的任何部分。我考虑过使用Ajax,该脚本会将数据发送到客户端并调用Ajax函数,该函数随后会调用另一个邮件脚本,但这会让用户知道正在发送什么,并且可能会被篡改。有没有其他方法可以

我有一个php脚本,如果用户购买成功,它会向用户发送一封邮件。问题是,由于邮件,页面加载速度较慢。我知道有很多方法,比如将邮件放入数据库表,然后使用cron作业发送邮件,但购买频率可能很高,我希望立即发送邮件,所以这看起来不是一个好的选择


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

你的想法是对的。在这种情况下,我会这样做:

除非此时您想购买,否则用户不会购买ajax 在处理购买的过程中,会将一封电子邮件插入到电子邮件表中,其中包含id&Send列以及所有其他内容。 用户将进入成功页面 成功页面在后台启动ajax,从db发送带有该id的电子邮件,而不关心结果 负责发送电子邮件的php页面发送电子邮件并标记“已发送”列
如果有人用未发送的id打电话到您的数据库,那么该电子邮件无论如何都需要发送出去,所以没关系。如果id不匹配或sent列标记为true,则可以忽略它。不用担心人们试图使用您的系统发送垃圾邮件。

您的想法是正确的。在这种情况下,我会这样做:

除非此时您想购买,否则用户不会购买ajax 在处理购买的过程中,会将一封电子邮件插入到电子邮件表中,其中包含id&Send列以及所有其他内容。 用户将进入成功页面 成功页面在后台启动ajax,从db发送带有该id的电子邮件,而不关心结果 负责发送电子邮件的php页面发送电子邮件并标记“已发送”列
如果有人用未发送的id打电话到您的数据库,那么该电子邮件无论如何都需要发送出去,所以没关系。如果id不匹配或sent列标记为true,则可以忽略它。不必担心有人试图使用您的系统发送垃圾邮件。

邮件应在将邮件排入邮件服务器后立即返回,这通常不会花费任何时间,因此我认为您这里的问题肯定是邮件服务器,而不是PHP。我猜您提交的邮件服务器正在运行一些反垃圾邮件检查,比如反向DNS查找。它还可能根据使用情况限制您。您可以尝试通过另一个邮件服务器发送来验证吗

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


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

邮件应该在将邮件排入邮件服务器后立即返回,这通常不会花费任何时间,因此我认为您这里的问题肯定是邮件服务器,而不是PHP。我猜您提交的邮件服务器正在运行一些反垃圾邮件检查,比如反向DNS查找。它还可能根据使用情况限制您。您可以尝试通过另一个邮件服务器发送来验证吗

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


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

您是在windows计算机上运行此操作的吗?问题是php需要连接到MTA,这可能是导致速度缓慢的原因。请参阅@hafichuk上的“注释”部分-这可能是一个原因,但我无法更改MTA。我无法控制服务器,因此我正在搜索以异步方式发送邮件的变通方法。Zend_mail和PEAR::mail等库允许您连接到任何SMTP服务器,因此您不必受主机默认PHP环境的限制。除非你在像GoDaddy这样的主机上,它会阻止非本地出站SMTP连接。我想看看哪个允许你异步发送邮件。我不确定这在windows系统t上能发挥多大作用
你是在windows机器上运行这个吗?问题是php需要连接到MTA,这可能是造成速度缓慢的原因。请参阅@hafichuk上的“注释”部分-这可能是一个原因,但我无法更改MTA。我无法控制服务器,因此我正在搜索以异步方式发送邮件的变通方法。Zend_mail和PEAR::mail等库允许您连接到任何SMTP服务器,因此您不必受主机默认PHP环境的限制。除非你在像GoDaddy这样的主机上,它会阻止非本地出站SMTP连接。我想看看哪个允许你异步发送邮件。不过,我不确定这在windows系统上能发挥多大作用。@AlexHowansky-你说得对,它连接好了,但标题需要一段时间。因此,唯一的选择是使用外部SMTP服务器?不一定。我建议联系邮件服务器的管理员,了解它在做什么检查。您的速度缓慢可能是由于您的域的DNS条目不正确等简单原因造成的。您还可以让他们将您列入白名单,以便根本不执行检查。@AlexHowansky-您是对的,它已连接,但需要一段时间才能找到标题。因此,唯一的选择是使用外部SMTP服务器?不一定。我建议联系邮件服务器的管理员,了解它在做什么检查。您的速度缓慢可能是由于您的域的DNS条目不正确等简单原因造成的。您还可以让他们将您列入白名单,这样就根本不会执行检查。