好了,這裏是我的問題:在PHP延遲電子郵件,以避免超出服務器限制
我有一個網站上的會員名單,以及管理員的週期性一個我的網站(誰是不太網站或科技知識)將發送簡訊給會員名單。 我目前的會員名單長度超過800人。
所以,我寫的是發送電子郵件到全會員,在密件抄送標題列出的成員的電子郵件的腳本。
然而,我發現,我的主機服務器每小時300個電子郵件,即使成員在密件抄送字段中列出我顯然超出極限。 (我以前沒有意識到,密件的行爲是派遣獨立的電子郵件。對名單上的每一個名字......)
經過一番思考,我得出的結論是我唯一的解決辦法是讓我腳本只會將電子郵件發送給前300封電子郵件,等待一個小時,然後再發送另一封電子郵件給另外300封電子郵件,再等一小時,等等,直到我將電子郵件發送到整個成員列表。
在互聯網上環顧四周,我已經看到了一些其他的解決方案,人們紛紛拿出在PHP延緩電子郵件。 Sleep()顯然不是一種選擇,因爲我不能將腳本保持打開並運行3到4個小時。我見過一些人提出cron作業,但我不確定在每次發送電子郵件時創建三個新的cron作業,使用它們一次,然後刪除它們,這是多麼可行。 我見過的最終(和我認爲最聰明的)解決方案是在我的數據庫中有一張表來臨時存儲要延遲並稍後發送的電子郵件,然後創建一個cron作業,每次檢查此sql表小時左右,將該行的時間戳與當前時間戳進行比較,然後在一小時後發送電子郵件。
所以我問你所有推薦的方法。有沒有更容易的解決方案,我已經完全查看了(除了獲得不同的託管計劃,哈!),還是有比數據庫/ cron工作方法更乾淨的方法嗎?
tl; dr:我有超過800封電子郵件在服務器上發送,一小時內將我限制爲300個小時。使用PHP,找到一種方法來解決這個問題,發送電子郵件的人只需點擊「發送」即可。
我對Gearman沒有任何經驗,但從我的鏈接中讀到的內容看起來非常有趣。 那麼,Gearman的工作人員會允許我在後臺運行睡眠呼叫過程?或者,我是否也必須將流程轉移到另一臺服務器? – Polyonymy 2010-03-24 02:19:26
啊,在GearmanClient類中找到我的答案。 doBackground()將完美工作。 謝謝多米尼克! – Polyonymy 2010-03-24 02:28:43