簡體   English   中英

從PHP發送大量電子郵件

[英]Send mass emails from PHP

我的網站上有80,000個用戶,而且我最近偏離了我一直在使用的論壇腳本,並且構建了一些非常簡單的東西,同樣適用(論壇腳本對於我的簡單站點來說太過臃腫和資源密集) )

我唯一丟失的是能夠向我的所有成員發送電子郵件。

所以我想找一個自己做的腳本。 環顧四周(包括這里的問題)我決定使用Swift Mailer是個好主意。

然而,我已經通過所有文檔,無法看到如何發送說“100一次”,我不知道如何去做。

簡而言之。 我有一個管理面板,其中包含兩個輸入“subject”和“message”的表單。 當我點擊提交什么是最安全的方式讓我發送80,000封電子郵件而不會崩潰我的服務器或被標記為垃圾郵件?

我是一個非常強大的專用服務器,所以沒有與共享服務器相關的問題。

提前感謝任何建議!

安全選項是一個接一個地發送電子郵件。 我通常發送不超過10封電子郵件10分鍾。 cron發出的簡單腳本就是您所需要的。

一次發送許多電子郵件是一回事,但讓它們全部交付並通過服務器過濾器是不同的東西......

Swiftmailer這樣的類可以選擇群發電子郵件。

這是我的想法......假設你是托管在linux類型的盒子上。 在不知道您的代碼的情況下,這當然是最低限度的。 在服務器上創建一個名為sendmails.php的文件

<? 
loop through email addresses however you do it
{
 usleep(250000); // sleep for quarter of a second 
 mail('user@example.com', 'My Subject', 'message');
}
?>

保存它,然后在另一個文件startemails.php中,您可以在瀏覽器中打開它

<?
system("&php sendmails.php");
?>

即使服務器超時,系統調用仍應完成其工作。 使用此方法,80,000封電子郵件應發送約6小時。 改變睡眠時間,花費更多或更少的時間。

而不是Cron,你需要一個守護進程,Swiftmailer不能輕易做到這一點。 問題是這樣的:你可以有一個Cronjob觸發器Swiftmailer讓我們說每5分鍾一次,但是如果它沒有完成發送10000封郵件會怎么樣? 它可能會啟動另一個進程,因此您可能最終會嘗試在隊列中發送相同的文件。

我使用一種解決方法並創建了一個簡單的PHP守護進程(一個bash腳本也可以正常工作),它不斷檢查隊列中是否有電子郵件; 如果是這樣,它啟動Swiftmailer並發送1封電子郵件。 (將swiftmailer限制設置為1)。 然后daemonscript等待0.5秒,然后再次檢查。

如果需要,Swiftmailer可以處理多個隊列(您需要為每個隊列啟動第二個deamon進程)。

不幸的是,Swiftmailer沒有'send /'文件夾,所以一旦發送它們就會消失。 因此,如果出現錯誤,您不能簡單地將文件從“發送/”移回隊列以重新發送。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM