2009-08-27 73 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行,如果是這樣會睡在每個...這工作沒有錯綜複雜的數據庫:)

謝謝!