假設我們有一個包含通訊訂閱者的2000郵件列表,我們需要向他們發送大量電子郵件。發送電子郵件以防止垃圾郵件時,服務器確實有小時限制。使用SwiftMailer的Throttle Plugin會導致服務器斷開連接
有些人每小時有300或500個電子郵件,這是公平的。
當使用swiftmailer throttle插件發送每分鐘8封電子郵件(8 * 60分鐘= 480封郵件總數低於500的限制)時,服務器關閉連接並以「404 - 未找到頁面」響應。
奇怪的是,它在腳本執行過程中發送了100個或更少的電子郵件,但服務器仍將該過程視爲無限循環並終止腳本執行。
如果我嘗試一次發送500封郵件而沒有油門插件,它就像一個魅力。但是如果我需要發送更多像1500或2000這樣的電子郵件呢?
我讀過油門插件使用PHP的本地功能sleep()
應該在這樣的情況下正常工作。
我被告知,如果通過Cron Job而不是通過HTTP協議執行進程,它可以工作。我試過用wget和curl來設置cron作業,但仍然沒有運氣。
我從我進行的研究中瞭解到,在Swiftmailer中使用SMTP服務器時,3秒處理需要28秒(比本應該更長)。所有查詢都經過優化,所有數據都正確放置在內存中,而不會使服務器過載。
之後,我決定在不使用SMTP的情況下給它一個鏡頭,但Throttler插件不能像它應該那樣工作(再次)。
任何意見或建議將不勝感激。
編輯:我也看到了這一點:SwiftMailer Batch email times my Server out
當然,我用這個:
ignore_user_abort(true);
set_time_limit(0);
ini_set('max_execution_time', 0);
ini_set('memory_limit', '256M');
ini_set('mysql.connect_timeout', 500);
ini_set('default_socket_timeout', 500);
PS:我是被迫改劇本的行爲,現在,使其計算服務器的限制是基於每分鐘用戶輸入的電子郵件數量,如果活動用戶的總數小於或等於要發送的電子郵件數量,那麼它將發送它們而不使用油門插件。
向那, 喬治Girtsou