在30秒执行时间内可以使用多少mail()函数?

时间:2009-11-03 23:13:37

标签: php email execution-time

我必须制作一个页面,将电子邮件发送给时事通讯订阅者。有超过14000个订户。我想使用php mail()函数向他们发送电子邮件。但我担心它无法向php 30sec max_execution_time限制的所有订阅者发送电子邮件。通过向订阅者发送测试电子邮件,无法测试可以发送多少电子邮件。所以我想知道在30秒max_execution_time限制内可以使用mail()函数发送多少电子邮件。 如果你能回答我,将会非常有帮助。

另外一个问题 - mysql的执行时间是否也计入php?

Apache 2.2.13版(Unix) PHP版本5.2.11

5 个答案:

答案 0 :(得分:4)

php max_execution_time设置是可自定义的。 30秒是默认值,但您可以将其设置为0秒,完全没有执行时间限制。使用set_time_limit()

set_time_limit(0);

如果您这样做,您应该能够发送所有电子邮件。

请注意每秒向同一邮件服务器发送多封电子邮件。你不想被列入黑名单。

答案 1 :(得分:3)

您应该从cronjob运行它或生成后台任务或使用更适合批处理作业的其他任务。

如果您的邮件服务器速度足够快,您可能会在30秒内收到14000封电子邮件,但是当您获得更多订阅者并且它停止正常工作时会发生什么?

也许您可以在数据库中为每个用户设置一个标志,然后重置该标志,因为他们的电子邮件是由后台任务发送的。如果邮件服务器出现问题,这将有助于避免重复等问题。

答案 2 :(得分:2)

这取决于很多变量,单个答案是不可能的。因素包括:

  1. CPU的速度
  2. 从发送系统到MTA的可用带宽
  3. MTA接受电子邮件的能力
  4. 找出答案的唯一方法是尝试。

答案 3 :(得分:0)

我的一个项目有一段时间我遇到了这个问题。解决方案是隔离从实际站点发送的电子邮件。

我编写了一个叫做发送电子邮件的小班。它将传递一个模板化的电子邮件,然后它将存储到邮件队列中的数据库中。在后端,我有一个cron作业,每X秒调用一次邮件脚本。脚本查看数据库队列中的电子邮件,从队列中抓取X号以尝试发送(按时间戳排序),然后尝试传递。假设没有抛出任何错误,脚本会将消息标记为已发送。下一步是清除队列中发送的所有电子邮件,这些电子邮件的发送时间超过X天(保留用于记录)。

希望这有帮助。

答案 4 :(得分:-4)

说真的,如果你想从普通的mailapp向10个人发送同样的邮件,你通常会创建10个相同的邮件,或者只是在将收件人添加到发送列表后发送邮件吗?

编辑:如果答案是“我发送一次”,我认为你也应该在这方面看一下(甚至还介绍了如何在{{3}发送给多个收件人})