2011-03-09 67 views
8

我知道如何使用PHPmail發送電子郵件。但是如果我需要發送大量電子郵件呢?如何在php中安排電子郵件通知

當發佈新消息時,這可能是網站訂閱者的「通知」。直接在頁面處理程序中執行此操作將嚴重影響性能並導致瀏覽器加載速度過慢。所以我需要在「背景」中完成這項工作。

在我的情況下,如何「安排」PHP中的某些內容 - 發送電子郵件?例如在C++中,我會創建一個單獨的線程,但AFAIK在PHP中不存在多線程。

回答

8

創建發出你保存在數據庫郵件隊列的cron作業:

  1. 保存的所有信息到數據庫中的電子郵件。

  2. 使用CRON作業定期(如每半小時左右 - 取決於您的託管服務提供商和您發送的電子郵件數量)從隊列中抓取電子郵件併發送出去。然後在數據庫的電子郵件上設置一個sent標誌,添加您想要的發送信息(例如時間,錯誤,標題,...)。

務必將電子郵件分成幾塊並暫停發送,以避免某些電子郵件服務器的反垃圾郵件和防洪保護問題。一些郵件程序庫有插件(如SwiftMailer)。

3

要安排這樣的事情,最好使用cronjobs,這是在服務器本身而不是在PHP中定義的。然而,cronjob可以調用一個PHP腳本來執行。
使用cronjob執行此操作具有一些優點,因爲它不會(直接)影響最終用戶的性能,並且可以使其在特定時間運行。

1

我使用一個後臺進程(一個PHP程序可以在命令行中運行,如果你有通過CLI [命令行界面訪問服務器])。該進程檢查排隊發送的電子郵件的MySql表。

在我的方法中,瀏覽器不用於發送電子郵件,而只是將它寫入MySql表。

1

讓您的所有電子郵件數據存儲在Mysql數據庫中。 表結構可能會像。

TO_EMAIL_ID | EMAIL_TYPE |電子郵件主題| EMAIL_CONTENT |處理| INSERT_TIME。

將您所有的電子郵件內容插入此表中。 並有一個PHP腳本從該表中獲取數據並批量發送電子郵件, 並刪除/標記處理髮送的電子郵件。 可以說這個文件是sendMailers.php 然後你可以設置一個cron作業來每5分鐘運行一次這個文件。 看到http://www.foogazi.com/2006/12/07/understand-cron-jobs-in-5-minutes/

*/5 * * * * PATH_TO_PHP sendMailers.php 
2

您可以使用cron作業定期運行一個腳本,併發送任何顯着的通知。

另一種方法是在後臺啓動另一個進程,使用類似於:exec('php send_notifications.php 1>/dev/null 2>1 &');(注意最後的東西)。

0

您需要在Windows中使用計劃任務,或者在類Unix操作系統(即:linux)中使用cron作業。