PHP一次可以发送多少封电子邮件?

时间:2011-11-30 05:04:59

标签: php email

我有超过4,000名用户通过电子邮件订阅每周更新。要发送电子邮件,我只需使用:

mail($to,$subject,$message,$headers);

哪个效果很好。我的问题是:您一次可以发送多少封电子邮件?我可以通过循环中的一系列电子邮件一次发送所有4,000个吗?或者这会导致超时情况,只有部分列表会收到电子邮件吗?

5 个答案:

答案 0 :(得分:7)

通常,您的限制是PHP的内存分配和脚本超时,两者都可以增加。更大的限制因素是垃圾邮件防火墙,它通常会限制可以来自服务器和另一个域的电子邮件数量。批量电子邮件服务使用间隔来限制在给定时间段内发送到任何给定域的邮件数量。

答案 1 :(得分:3)

PHP没有限制,你可以按照你说的做,然后在紧密的循环中运行它。

在linux上,它是sendmail或sendmail克隆。如果它开始过载,它应该开始排队你的邮件,并尽可能地发送它们。对于Windows,您有一个套接字连接,我想邮件服务器可能会在连接过载时开始拒绝连接。

除非你急于发送所有内容,否则请在每次调用mail()之间考虑睡眠(2)。如果一切顺利,那么下次尝试睡眠(1)。然后下一次睡眠(500000),等等。(更新:遵循Matt的建议,将set_time_limit(10)置于循环内,以避免耗尽CPU时间。)

如果你希望他们发送得更快,你可以使用多个本地继电器进行循环播放。 (在Windows上,您可以通过设置SMTP php.ini设置来处理此问题;在Linux上,您将使用通过套接字发送电子邮件的库。)或者考虑使用专业的邮件广播服务,他们负责处理所有这些问题对你而言。

编辑刚刚看到您关于从Mac运行它的评论。我假设一个服务器情况,一个真正的邮件服务器与全局IP。如果您的Mac位于防火墙后面,您很可能会将所有电子邮件转发到ISP的邮件服务器。您的ISP可能会在短时间内收到您的4000封电子邮件而感到不安。 (例如,他们可能会认为您的计算机已被病毒攻击并关闭了您。) 此外,在共享主机上,同意不发送大量电子邮件通常是合同的一部分。所以也要小心。

答案 2 :(得分:1)

它不依赖于php,但它取决于您的sendmail服务器功能和您的托管服务提供商对您可以在一段时间内发送的电子邮件限制的支持..! PHP只会将您的电子邮件放入sendmail队列......!

答案 3 :(得分:0)

考虑到循环将是顺序的,您可以通过循环一次性发送它们。它更依赖于邮件服务器,而不是PHP。

虽然如果你正在使用WAMP,可能会导致问题,因为windows下的mail()行为是不同的。它不是与MTA交谈,而是尝试使用套接字来传递邮件。

答案 4 :(得分:0)

无法提供确切的数字。这取决于您的邮件服务器和最长执行时间。 发送大量电子邮件的最佳做法是“ cron job