在PHP中调用Mail()之间休眠

时间:2009-08-27 20:43:08

标签: php email sleep

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

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

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

这不会起作用,错误的陈述,但无论如何这个概念....

5 个答案:

答案 0 :(得分:3)

我要做的是:

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

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

如果您想在邮件之间休息一段时间,请使用sleep功能; 2到5秒之间的事情可能没问题,确保在cron重新启动脚本之前编写了450封邮件的脚本。


并且,考虑一下:

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

答案 3 :(得分:0)

你可以使用这个非常方便的Timer类来为你做繁重的工作(开始,停止并获得循环中经过的时间等):PHPClasses: Timer.php

答案 4 :(得分:0)

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

用户不太可能发送超过450的限制...但是如果他们在while()结束之前检查是否有超过450行,那么它会在每个之间休眠。 ..这没有繁琐的数据库:)

谢谢!