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

Php 在30秒的执行时间内可以使用多少mail()函数?,php,email,execution-time,Php,Email,Execution Time,我必须做一个网页,将发送电子邮件给时事通讯订户。有14000多名用户。我想使用php mail()函数向他们发送电子邮件。但我担心,它将无法发送电子邮件给所有订阅者的php 30秒最大执行时间限制。通过向订户发送测试电子邮件来测试可以发送多少电子邮件是不可能的。所以我想知道在30秒的最大执行时间内,使用mail()函数可以发送多少电子邮件。 如果你能回答我,我会很有帮助的 还有一个问题——mysql的执行时间在php中也算吗 Apache版本2.2.13(Unix) PHP版本5.2.11PHP

我必须做一个网页,将发送电子邮件给时事通讯订户。有14000多名用户。我想使用php mail()函数向他们发送电子邮件。但我担心,它将无法发送电子邮件给所有订阅者的php 30秒最大执行时间限制。通过向订户发送测试电子邮件来测试可以发送多少电子邮件是不可能的。所以我想知道在30秒的最大执行时间内,使用mail()函数可以发送多少电子邮件。 如果你能回答我,我会很有帮助的

还有一个问题——mysql的执行时间在php中也算吗

Apache版本2.2.13(Unix)
PHP版本5.2.11

PHP
最大执行时间
设置可自定义<代码>30秒是默认值,但您可以将其设置为
0
秒,完全没有执行时间限制。使用

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


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

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

如果你的邮件服务器足够快的话,你可能会在30秒内收到14000封邮件,但是当你多了几个订户,邮件服务器停止正常工作时会发生什么呢


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

这取决于太多的变量,不可能只给出一个答案。因素包括:

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

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

    说真的,如果你想从普通的mailapp向十个人发送相同的邮件,你通常是创建十封相同的邮件,还是在将收件人添加到发送列表后发送邮件


    编辑:如果答案是“我发送一次”,我想你也应该朝这个方向看(这里甚至描述了如何发送给多个收件人)

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

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


    希望这会有帮助。

    这个问题没有考虑很多因素,比如系统速度、负载等。一个潜在的问题是,你的邮件服务器被列入黑名单,ISP开始阻止你的电子邮件。+1反驳某人以前的错误-1:是的,我们遗漏了很多硬数字,但是答案不是关于数字,而是关于如何正确执行。对于您关于MySQL时间的问题:在Windows上,是的,所有内容都是计算在内的,包括数据库查询、I/O、与邮件服务器的对话等。在其他平台上,只考虑执行实际PHP代码所花费的时间。如果您想要定制内容(“你好,”),或直接取消订阅链接,然后是的,我将发送10封不同的电子邮件。这正是我将使用脚本而不是桌面mailapp的原因。不幸的是,如果发送到列表太长,MTA将自动截断发送到列表。此外,订户电子邮件通常使用订户的name@Wim:是的,但那样的话,你是在尝试以一种非预期的方式使用工具。在这种情况下,有比从脚本调用mail()更好的方法。@gnibler:当然,但是每封邮件有20个收件人将大大减少smtp聊天的次数。您可以用相同的名字将所有人密件抄送;)
    亲爱的Bob,
    别忘了有些人(大多数?)邮件服务器将限制传入的连接,以避免垃圾邮件和其他恶意行为。最好是每秒发送一封邮件,并且一定要使用cronjob/background任务,以增加最大执行时间。@Wim:这一点很好。还有其他方法可以处理此问题。例如,您还可以确保不向任何一台服务器发送电子邮件ice在同一秒使用循环策略。这将允许您在不影响任何单一邮件服务器的情况下获得高吞吐量。
    set_time_limit(0);