【问题标题】:Sleep between calls of Mail() in PHP在 PHP 中的 Mail() 调用之间休眠
【发布时间】:2009-08-27 20:43:08
【问题描述】:

我将如何发送一封电子邮件,比如 3000 个收件人 - 在我的专用 IP 上最多 500 封电子邮件/小时?到目前为止,我的想法是每 9 秒发送一次电子邮件,这将达到每小时大约 450 封电子邮件......但我该怎么做呢?

我发送电子邮件的计划如下...

$emails = ARRAY OF EMAILS, MYSQL RESULT
for($emails){
mail($subject,$row[email],$headers);
}

这是行不通的,这是一种错误的说法,但无论如何这个概念......

【问题讨论】:

    标签: php email sleep


    【解决方案1】:

    我会做的是:

    • 创建一个每小时通过 cron 启动一次的 PHP 脚本
    • 此脚本以自己的速度仅发送 450 封电子邮件
    • 当发送 450 封邮件时,脚本终止
    • 一段时间后,它由 cron 重新启动,以发送 450 封其他邮件。

    诀窍是:您必须知道哪些邮件已经发送到哪里。
    我想在你的数据库中按 id 或类似的东西排序邮件,并使用限制,就可以了

    如果你想在邮件之间睡一会儿,使用sleep函数; 2 到 5 秒之间的时间可能没问题,以确保在 cron 重新启动脚本之前完成 450 封邮件的脚本。


    而且,考虑一下:

    • 您应该放置一些日志记录:如果有人抱怨说他收到了 10 封电子邮件,它可以帮助您找出原因。
    • 我不会使用 mail 函数:还有很多其他可能性,使用经过充分测试并提供大量功能的库,已经开发:不要重新发明轮子 ;-)李>

    这里有几个我可以考虑的库:

    【讨论】:

    【解决方案2】:

    将要发送的消息存储在数据库中,标记已发送的消息。 在 cron 作业中选择其中一些未发送的,并处理它们。 cron 作业的频率决定了发送电子邮件的速度。

    【讨论】:

    • 向用户提问:此外,您不能让 PHP 脚本无限期运行 - 大多数服务器都会限制脚本运行时间。
    【解决方案3】:
    【解决方案4】:

    您可以使用这个非常方便的 Timer 类来为您完成繁重的工作(启动、停止和获取循环中经过的时间等):PHPClasses: Timer.php

    【讨论】:

      【解决方案5】:

      感谢所有答案! 我发现最好的方法实际上是在我测试 400 封邮件时使用 sleep() 在调用之间简单地 sleep(),这需要 17 秒:)

      用户不太可能发送超过 450 的限制......但如果他们这样做,我在 while() 结束之前有一个 if 语句检查是否有超过 450 行,如果有,它将在每行之间休眠。 .. 这无需繁琐的数据库即可工作:)

      谢谢!

      【讨论】:

        猜你喜欢
        • 2014-11-10
        • 2015-04-17
        • 2020-02-24
        • 2010-10-20
        • 1970-01-01
        • 1970-01-01
        • 2010-10-11
        • 2011-08-14
        相关资源
        最近更新 更多