1

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

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

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

这行不通,错误的陈述,但无论如何这个概念......

4

5 回答 5

3

我会做的是:

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

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

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


而且,考虑一下:

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

以下是我可以考虑的几个库:

于 2009-08-27T20:49:33.087 回答
2

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

于 2009-08-27T20:48:26.940 回答
1

SwiftMailer会为您做到这一点:

于 2009-08-28T00:18:30.700 回答
0

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

于 2009-08-27T20:50:58.747 回答
0

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

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

谢谢!

于 2009-08-28T09:18:07.950 回答