4

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

还有另一个问题 - mysql 执行时间是否也在 php 中?

Apache 版本 2.2.13 (Unix) PHP 版本 5.2.11

4

5 回答 5

4

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

set_time_limit(0);

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

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

于 2009-11-03T23:16:53.030 回答
3

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

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

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

于 2009-11-03T23:18:26.820 回答
2

这取决于如此多的变量,以至于不可能有一个单一的答案。因素包括:

  1. CPU的速度
  2. 从发送系统到 MTA 的可用带宽
  3. MTA 接受电子邮件的能力

找出答案的唯一方法是尝试一下。

于 2009-11-03T23:18:49.487 回答
0

我在我的一个项目中遇到了这个确切的问题。解决方案是将发送的电子邮件与实际站点隔离开来。

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

希望这会有所帮助。

于 2009-11-03T23:59:09.667 回答
-4

说真的,如果您想从您的普通邮件应用程序向十个人发送相同的邮件,您通常会创建十封相同的邮件,还是在将收件人添加到发送列表后发送邮件?

编辑:如果答案是“我发送一次”,我认为您也应该在这里看看这个方向(甚至在http://www.php.net/mail上描述了如何发送给多个收件人)

于 2009-11-03T23:19:28.753 回答