2011-05-27 55 views
0

從編程角度來說,什麼是間隔發送批量電子郵件而避免PHP超時的簡單直接方式?這是爲了聯繫屬於一個站點的幾千名成員。交錯電子郵件發送

P.S:思考沿分裂的條件發送到N個電子郵件地址和腳本以某種方式自稱。

+1

我只想通過第三方服務。 – 2011-05-27 15:40:43

+0

輕鬆的話題,但如果這是你反覆計劃的事情,你可能會考慮發送批量電子郵件的商業解決方案。如果您不小心,可能會被標記爲垃圾郵件發送者。 – Greg 2011-05-27 15:42:37

回答

1

如果發送到所有訂閱的網站,你可以做到以下幾點:

  1. 用戶表中添加列(如果它不存在 ),東西 像「email_sent 「並默認爲1 (代表是)
  2. 當你執行你的郵件發送 觸發,更新所有用戶記錄 設定‘email_sent’標誌0 (因爲沒有)。
  3. 建立一個執行 PHP腳本cron作業(甚至擊中使用指定的頁面您的Web 服務器 執行腳本),然後 選擇具有 「email_sent」設置爲0,第N個用戶,發送他們 電子郵件,並將每個成功的'email_sent' 列更新爲1。

如果您要處理多個郵件,您需要通過另一個維護用戶的表加入:mailout關係和'email_sent'狀態。

+0

一個明智的解決方案。我可能會在中期添加這些更改以改進網站。 – 2011-05-28 04:07:42

2

最簡單的方法是隻需幾秒鐘入睡後的電子郵件每x號碼發送:

$count = 0 
while (foo) { 
    send_email(); 
    if ($count++ == 100) { 
     sleep(10);//sleep for 10 seconds 
     $count = 0; 
    } 
} 
+0

雖然這不會避免PHP超時。它可能通過浪費時間睡覺而不是花費郵寄來鼓勵它。 – 2011-05-27 15:42:58

+0

@Marc:不完全正確,花在睡眠上的時間不會影響腳本的執行時間。當然,腳本運行需要更長的時間,我同意確實有更高效的方法來完成目標,但OP要求提供一個簡單而直接的解決方案。 – 2011-05-27 15:52:58

+0

我可能會試試這個。我想要一個簡單而直接的解決方案的原因是儘快讓一些東西運行。之後我可以看看改進。我正在探索的另一條路線是使用Ajax調用一個頁面,並通過50封左右的電子郵件發送電子郵件。 – 2011-05-28 04:05:15

1

您還可以嘗試使用sleep命令或手動交錯cronjobs但一個更好的選擇可能會尋找到一個既定的庫處理的細節爲您提供:PEAR Mail_Queue

的Mail_Queue類把郵件在 臨時容器,等待被送入 到MTA(郵件傳輸代理),和 稍後發送它們(例如,某種 每隔幾分鐘的郵件數量)通過 crontab或以其他方式。

也有很多公司會以一個價格爲您處理所有這些,如果這是您的選擇。

+0

去與第三方不是一種選擇。梨看起來很有趣。我希望它支持PHP郵件功能,因爲沒有SMTP(由主機禁用)。 – 2011-05-28 04:12:17