2013-08-07 95 views
2

我目前正在開發一個需要向用戶發送電子郵件通知的項目。它的工作方式是,用戶遵循某些帖子/組的帖子,只要帖子類別/組下有新帖子或評論,他們就會收到郵件通知,並通過帖子本身的片段通知他們。使用PHP的電子郵件通知系統MySQL

我期待每天發送超過5000封電子郵件。是否有效地使用cron作業來間隔地獲取用戶和發送電子郵件,或者有更好的方式來推送此電子郵件,同時避免電子郵件提供商將我的IP列入黑名單。

下面是我的表結構

首先表

Notification 
ID // autoincrement 
message // the message sent to users 
createDate // date created 

二表

User_Notification 
ID // auto increment 
userid // Id of users 
notification_id // id of notification from first table 
status // 0 or 1 

因此,只要添加後的,我插入第一個表的通知(通知)和然後從另一個表(以下)中獲取該組的所有追隨者,其中存儲用戶標識和組標識。然後爲每個用戶插入第二個表(user_notification)。

我的cron作業從user_notification表中獲取20條記錄,並從通知表中獲取通知消息。我也從我的用戶表中獲取用戶電子郵件。

$firstquery = $lnk->mysqli->query("select * from user_notification where status=0 order by id ASC limit 0, 20", MYSQLI_USE_RESULT); 
$secondquery = $lnk->mysqli->query("select * from notification where id=$notification_id", MYSQLI_USE_RESULT); 
$thirdquery = $lnk->mysqli->query("select email from user_table where id IN($userids)", MYSQLI_USE_RESULT); 

for($no=0;$no<counter;$no++)// loop to send emails 
{ 
$lnk->emailsender($subject,$emailbody,$usr_email[$no]); 
} 

請問有沒有更好的方法來做到這一點?

+2

通過isp列入黑名單並不重要,如果您按時間間隔發送它們並不重要。我們嘗試了這一點,我們的isp首先阻止了他們,因爲他們認爲我們被黑客攻擊了,在解除阻止並拒絕這樣做後,我們然後遇到了DNS服務器主機的問題,因爲他們表示,它會減慢DNS服務器的查詢量通過DNS製作。我們也權衡了選項,然後意識到最好使用已經擁有白名單IP地址的第三方,併爲這些應用程序構建 –

+0

您將被列入黑名單,除非您使用其他方式發送您的電子郵件。 嘗試使用sendgrid真的很容易使用,並且不那麼昂貴。 http://sendgrid.com/docs/Code_Examples/php.html –

+0

@LiamSorsby謝謝你的解釋,我很感激。 – andychukse

回答

2

除非您與ISP有非常具體的關係,否則極有可能您將被列入黑名單,否則您的電子郵件將直接進入垃圾郵件。很難將大量的電子郵件建立爲合法的。你可以使用羣發郵件服務API爲你做一些骯髒的工作,比如郵件黑猩猩或者常量聯繫人。

因此,您擁有的代碼很可能會工作,減去通過郵件服務和相關API完成的電子郵件位。

+1

謝謝我要[mandrill.com](http://mandrill.com)(由mailchimp擁有)。我感謝你的坦誠的建議。 – andychukse

1

每天5000封電子郵件大約是每分鐘4封電子郵件,或每15秒發送一封電子郵件。如果我是你,我會寫一個cron例程來運行每分鐘發送將要發送的電子郵件。例如,這可以確保您避免被視爲垃圾郵件發送者,以便快速發送2500封電子郵件。這也意味着您的用戶可以快速收到電子郵件通知

您也可以在用戶收到通知後立即發送電子郵件,繞過cron例程的需要,但是如果您的網站因任何原因遇到活動激增,您可能會發現某些電子郵件無法通過。

你也可以考慮使用MailChimp這樣的第三方服務,它已經對電子郵件服務提供商擁有很好的權威性,但是這樣做的代價是每分鐘收到4封電子郵件,我不認爲這是值得的。