2012-09-19 47 views
1

我需要在php/mysql中編寫我自己的電子郵件調度程序。我正在使用亞馬遜的SES發送電子郵件。我有記錄誰和什麼需要通過電子郵件發送到「隊列」MySQL表中。成功發送電子郵件後,每條記錄都會被刪除。我想盡快發送這些電子郵件,但我需要記住亞馬遜的配額。他們限制您的允許電子郵件發送/秒。帶有郵件配額的php/mysql調度電子郵件

我該如何安排這個不超過限制?我知道我可以編寫一個php cron腳本,它只會從隊列中提取X條記錄併發送這些記錄,但是如果我的cron每分鐘只運行一次,則會浪費大量時間。 (X是配額限制/秒)

另一方面,如果我的電子郵件配額被碰撞,我可以發送1000 /每秒(或荒謬的東西),我可能會遇到問題,如果我的腳本需要很長時間才能執行。 cron可能會再次觸發並從隊列表中提取相同的記錄。

+2

發佈soome代碼..所以你想要做的SELECT * FROM隊列限制1,maxallowance ..如果它不現在把它也許不會永遠發送COS你希望發送到直接電子郵件所以,除非你不能連接..多數民衆贊成在它得到..顯示一些代碼,希望運行它通過cron ..如果你使用PHP .. – BugFinder

回答

2

您應該在執行腳本時創建一個鎖文件,並在執行完成時將其移除。然後,您可以提醒自己腳本是否在沒有完成前一個執行的情況下再次運行。

$filename = 'sending_emails.txt'; 
if (file_exists($filename)) { 
    mail('[email protected]', 'Execution overlap', 'Adjust script parameters!'); 
    exit; 
} 
file_put_contents('sending_emails.txt', '1'); 
// Send e-mail logic here 
unlink($filename); 
+0

這是一個聰明的方式來做到這一點。謝謝! – David