2013-04-10 82 views
2

目標: 實現模塊化,可重用,面向對象的類或包,負責自動執行用戶通知過程。 這些通知按照一定的規則集發送給多個用戶,如前所述。例如:每當新用戶註冊並且定義了系統消息,並且每個超級用戶有超過10個活動用戶時,則將該系統消息發送給所有用戶。如何實現可輕鬆與SendGrid集成的郵件隊列

這些'規則'可能會被實現爲方法或其中的SQL模型的子類。

環境: LAMP,PHP 5.3。 首選的實現將在PHP中。 SendGrid郵件投遞服務+他們的官方PHP庫。

實現(我到目前爲止的想法): 我想過使用cronjob或Apache HTTP worker,事情是這個模型將負責系統的所有電子郵件通知,並且在那種情況下它將不得不每60秒左右運行一次,以確保按時和同步交貨。 要添加或刪除cronjobs,我想過使用PHP的exec()或system(),儘管我確信有更好的方法,可能直接使用文件函數編輯cron作業文件?

問題: 任何實現都應該能夠與SendGrid集成,因爲這是我們當前使用的交付系統 ,並且它被證明是有效的。

這是系統的核心,所以它需要儘可能的防故障,並且有自診斷能力,否則沒有什麼好的結果出來,最好是將它們發送出去電子郵件通知直接通過用戶訪問的網頁,並在加載時間,設計等方面妥協。

任何想法?,我是在正確的方向呢? 我一直在尋找已經在github和其他網絡上實現的東西,但沒有任何東西符合我的需求和要求。 SendGrid也似乎不提供內置隊列。

任何幫助非常感謝!

回答

3

我在SendGrid工作。

最強大的解決方案是不在代碼中實現隊列,而是設置本地郵件服務器並讓它管理您的電子郵件隊列。該郵件服務器將被配置爲使用SendGrid作爲提供所有其他功能的智能中繼。

這樣做有幾個好處:你的應用服務器 你的本地郵件服務器可以管理隊列之間的本地郵件

    • 非常低的延遲。
    • SMTP命令流水線減少協議的請求數

      我們有​​,可以指向你在正確的方向。

    就觸發發送到本地服務器的邏輯而言,我認爲你是在正確的軌道上。你可以用cron構建一個後臺進程系統,或者你可以使用像php-resque這樣的東西,它可以抽象出一些東西,並讓你在代碼中獲得更多的控制權。 php-resque或類似的解決方案可能會給你足夠的控制權,讓你有信心不使用本地MTA。

  • +0

    這是一個很好的建議,但如果我們在沒有任何特定本地SMTP服務器的Azure上運行我們的應用程序,該怎麼辦?你認爲我們應該在這種情況下做什麼? – 2015-03-11 14:44:56

    +1

    嗨@RobertKoritnik,我會推薦實現一個隊列服務https://msdn.microsoft.com/en-us/library/azure/hh767287.aspx來處理這個:) – bwest 2015-03-17 15:08:01