[英]How to schedule email notifications in php
我知道如何使用PHPmail發送電子郵件。 但是,如果我需要發送大量電子郵件呢?
這可能是發布新消息時網站訂閱者的“通知”。 直接在頁面處理程序中執行此操作將嚴重影響性能並使瀏覽器加載速度過慢。 所以我需要在“背景”中完成這項工作。
在我的情況下,如何用PHP“安排”某些東西 - 發送電子郵件? 例如,在C ++中,我會創建一個單獨的線程,但AFAIK在PHP中沒有多線程這樣的東西。
創建發送您保存在數據庫中的電子郵件隊列的CRON作業:
將包含所有信息的電子郵件保存到數據庫中。
定期使用CRON作業(比如每半小時左右 - 取決於您的托管服務提供商和您發送的電子郵件數量)從隊列中抓取電子郵件並將其發送出去。 然后在數據庫中的電子郵件上設置sent
標志,添加您想要的發送信息(例如時間,錯誤,標題......)。
請確保將電子郵件分解為塊並將其暫停發送,以避免某些電子郵件服務器的反垃圾郵件和防洪保護問題。 一些郵件庫有插件(如SwiftMailer )。
要安排這樣的事情,最好使用cronjobs,這是在服務器本身而不是PHP中定義的。 但是,cronjob可以調用PHP腳本來執行。
使用cronjob執行此操作有一些優點,因為它不會(直接)影響最終用戶的性能,您可以在特定時間運行它。
將所有電子郵件數據存儲在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
您可以使用cron作業定期運行腳本並發送任何未完成的通知。
另一種方法是在后台啟動另一個進程,使用類似: exec('php send_notifications.php 1>/dev/null 2>1 &');
(注意最后的東西)。
您可以使用Create Cron Jobs來實現此目的,並參閱下面的討論
我使用后台進程(如果您可以通過CLI [命令行界面]訪問服務器,則可以從命令行運行PHP程序)。 該進程檢查MySql表以查找排隊等待發送的電子郵件。
在我的方法中,瀏覽器不用於發送電子郵件,而只是將其寫入MySql表。
您需要在Windows中使用計划任務 ,或者在類似Unix的操作系統(即:linux)中使用cron作業。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.