2012-03-30 149 views
0

我們目前有一個可用的PHP郵件腳本,這工作正常,正如我們所料。但是今天我們遇到了一個無法預料的問題,那就是服務器只能通過PHP每分鐘提供大約15封電子郵件,以避免將他們的IP地址作爲羣發郵件列入黑名單。PHP確認電子郵件,允許服務器的電子郵件限制

我們不想繞過這一點。我們想要一種方法來確保不超過此限制。所以我的問題是,根據最近60秒內發送的電子郵件數量,我可以使用哪些方法設置某種類型的延遲。

請注意,db_query()是用於執行SQL一個正確的,但專門的函數查詢

這裏是我們的郵件腳本(簡體):

$user_verification_key = md5(rand(1000, 100000000000)); 
db_query("insert into user_t values('" . $user . "', '" . $userinfo['first_name'] . "', '" . $fb_userinfo['last_name'] . "', '" . $userinfo['username'] . "', '" . $_POST['user_country'] . "', '" . $_POST['regions'] . "', '" . $_POST['paypal'] . "', '" .  $user_verification_key . "', 0)"); 
$msg = "Thankyou for signing up:\n\n 
     Click the link to verify your account: http://website.com/verify.php?user=" . $fb_userinfo['id'] . "&verify=" . $user_verification_key . " 
     "; 

mail($_POST['paypal'], 'Account verfication', $msg, 'From: ' . '[email protected]'); 
    header("location: index.php?page=home&msg=Congratulations, your account has been setup please verify your email address");   
+0

正如評論,我建議你考慮JangoMail.com的認證SMTP中繼,這將給你很好的傳遞能力,並消除這些限制。 – gahooa 2012-03-30 01:17:57

回答

2

一個簡單的方法是將存儲所有未處理Ë在MySQL數據庫中發送郵件並使用cronjob逐步進行檢查(例如每10-15分鐘)。這樣你就不會違反你的託管條款。

如果您使用cPanel,這非常容易,因爲您可以設置一個cronjob並將其鏈接到您的PHP腳本。你所有的腳本必須連接到你的數據庫,訪問所有未處理的電子郵件(即狀態爲0的郵件)併發送它們。當你通過它們循環時,將它們的狀態更改爲1.

如果您不太熟悉它們,請參閱有關cronjobs here的更多信息。

+0

+1,擊敗我!還有APC和其他共享內存解決方案。 – 2012-03-30 01:18:29

+0

感謝隊友,這似乎是最好的解決方案。非常感激。 – 2012-03-30 01:22:49

1

我能想到的最簡單的方法是將所有傳出的電子郵件存儲在數據庫中,然後使用運行每1(或2分鐘,以確保安全)的cron,併發送多達15封等待的電子郵件。