2012-01-19 87 views
2

有時我們需要發送很多電子郵件。我們選擇100個用戶,爲每個用戶創建郵件,發送它(添加到線軸),製作$em->clear()。但即使在製作環境中,我們也不能發送超過4000封電子郵件:「無法分配內存」。如何在Symfony2中通過Swiftmailer發送12 000封電子郵件?

什麼適當的方法來做到這一點?爲我們的命令添加參數,使用--skip=4000多次執行它?

+0

嗯 - 錯誤來自哪裏?比如你使用APC並且內存不足? – madflow

+0

當'serialize'調用'Swift_FileSpool :: queueMessage'時出錯 – Koc

回答

2

我們做了什麼,我們是不是將它線程化了...因此,假設您的用戶有一張桌子,並且您有一個ID和EMAIL列。我們假設將有更多/更少的相同數量的ID以零結尾,比以1,2等結束。

現在我們有我們的腳本發送電子郵件只發送電子郵件給結束的人例如零,另一個腳本發送給id字段以1結尾的人等等。例如,你使用參數來定義這個,假設你的腳本被稱爲「send-a-lot.php」,你將運行這10個命令:

php send-a-lot.php --ending-on=0 
php send-a-lot.php --ending-on=1 
php send-a-lot.php --ending-on=2 
php send-a-lot.php --ending-on=3 
php send-a-lot.php --ending-on=4 
php send-a-lot.php --ending-on=5 
php send-a-lot.php --ending-on=6 
php send-a-lot.php --ending-on=7 
php send-a-lot.php --ending-on=8 
php send-a-lot.php --ending-on=9 

裏面你的代碼,你想要做的事,如:

if ($id % 10 == $endingOnParameter) { 
    // send the mail 
} 

這不完全是你問的,但至少這是我們所做的,以幫助我們的「一些」我們的負載問題

+0

好主意 - 我喜歡這個! – stoefln

2

我提到我的經驗: 我發送約8000個個人電子郵件與symfony和SwiftMailer共享服務器上資源非常有限。我有一個包含用戶的表格,並創建一個任務或命令,在其中進行分頁查詢,並在我的任務中通過參數傳遞頁面大小。 Y每30分鐘在cron作業上執行此任務或命令。您可以根據您的資源進行配置。通過查詢頁面大小,您可以管理將發送多少封電子郵件,並且使用cron作業可以管理批次之間的時間。 我承認有更多專業和強大的解決方案,但這是我在資源有限的共享服務器上找到的唯一方法。

相關問題