2009-08-27 78 views
1

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

我对电子邮件的发送计划将是以下...

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

这不会工作,错误的一种说法,但这个概念呢....

+1

替代.. gammadyne邮件 - http://www.gammadyne.com/mmail.htm我担保它。 – madcolor 2009-08-27 20:45:44

回答

2

我会做的是:

  • 创建一个通过cron推出每小时一次PHP脚本
  • 这个脚本只发送450封电子邮件,以自己的速度
  • 450时邮件被发送,脚本死亡
  • 并且一段时间后,它由cron重新启动,发送450封其他邮件。

诀窍是:你必须知道哪些邮件已经发送。
订购由ID的邮件在你的数据库,或者类似的东西,和使用的限制,将是美好的,我想

如果你想睡觉的邮件之间的同时,使用sleep功能; 2到5秒之间的某些内容可能是确定的,为了确保在脚本被cron重新启动之前完成450个邮件的脚本编写完成。


而且,考虑这件事:

  • 你应该把一些东西记录在的地方:如果有人投诉,他说,他收到10封电子邮件,它可以帮助你找出原因。
  • 我不会用mail功能:有很多的其他的可能性,使用被良好测试库,并提供大量的functionnalities,已developped:不要重新发明轮子;-)

这里有几个库的我能想到的:

+0

SwiftMailer附带一个名为“Throttler”的插件,请查看http://swiftmailer.org/docs/throttler-plugin-howto – VolkerK 2009-08-27 20:56:48

2

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

+0

向用户提问:此外,您不能让PHP脚本无限期地运行 - 大多数服务器将限制脚本运行时间。 – dusoft 2009-08-27 20:51:49

0

你可以使用这个非常方便的Timer类做繁重的你(启动,停止和你的循环中得到的经过时间等):PHPClasses: Timer.php

0

感谢所有的答案! 我发现最好的办法其实是简单地使用,因为我测试了400个邮件的睡眠()调用之间的休眠(),这个花了17秒:)

这是不可能的用户将派出超过450极限.. 。但如果他们做我有一个if语句之前while()结束检查是否有超过450行,如果是这样会睡在每个...这工作没有错综复杂的数据库:)

谢谢!