2011-02-07 94 views
0

我正在尋找一個電子郵件庫來建立我們公司內部的通訊系統。 它應該支持消息隊列(向隊列發送郵件,在後臺自動發送郵件)而不會阻塞網絡服務器。 所以我認爲後臺處理應該作爲服務器上的後臺服務運行, 類似於aspmail,但爲PHP。php:尋找支持郵件排隊的電子郵件庫

有什麼建議嗎? 謝謝

回答

2

我已經使用PEAR的Mail_Queue一次排隊了200,000多封郵件。即使使用自定義內容,填充數據庫也非常簡單快捷,然後一個相當簡單的腳本可以發送大約250次 - 如果平均負載不太高。然後它循環併發送下一批。它從後臺運行,並且易於設置,以便如果隊列表爲空,則在再次檢查之前暫停片刻(因爲每秒檢查幾次對任何人都沒有幫助)。

同時檢查機器的負載平均值的好處是,它只會在隊列中緊縮而不會出現自創的資源不足的問題。

Mail_Queue tutorial爲您提供了幾乎所有您需要的東西 - 只需循環「send_messages.php」腳本(從命令行更好),直到數據庫隊列爲空,然後暫停一會兒 - 再循環。

4

我建議使用Gearman建立一個自動守護程序,等待您的Web服務器提交的作業。

有一個好的文章:http://kevin.vanzonneveld.net/techblog/article/create_daemons_in_php/解釋如何創建純PHP代碼的守護進程。

在Web服務器端,你只需創造就業機會(Gearman的客戶端),以及異步排隊他們到的Gearman守護進程。 然後你有你的郵件程序php守護進程等待作業(gearman worker),並在隊列中可用時執行它們。

如果你有一個龐大的郵件量發送,你甚至可以在多臺服務器,將等待在同一Gearman的作業隊列,以優化電子郵件處理部署的工人。

+0

+1對於Gearman建議 – 2011-02-07 12:05:53

1

它應該支持消息隊列(向隊列發送郵件,在後臺自動發送郵件)而不會阻塞網絡服務器。所以我認爲後臺處理應該作爲服務的後臺服務運行

WTF?管理隊列是電子郵件系統的工作 - 它的設計設計要做 - 它不是應用程序與它交談的責任。如果您的郵件服務器在您每次發送郵件時都會阻止,則會出現錯誤。

這聽起來像你正在嘗試寫自己的MTA,而不是固定有什麼不對您當前的規定。

如果您需要提供離線功能,然後安裝在PHP運行的機器上的MTA。

+0

不是PHP中的sendmail呼叫阻塞(相對較慢)。你會注意到它,如果你在你的webrequest內?)。特別是當你需要做很多的時候? – Alfred 2011-02-07 13:19:54

+0

實際上它是一個執行調用 - 但它應該**永遠不會**塊超過幾分之一秒 - 否則有一些非常錯誤(如錯誤配置的smartHost) – symcbean 2011-02-07 13:54:37

1

你可以使用redis爲您message queue

message queue

Redis的速度非常快,並積極開發的數據結構的服務器。用redis寫一些東西很容易。爲什麼我喜歡Redis其他消息隊列:

  • 積極開發。
  • 的Redis:

    一個開源的,先進的 key-value存儲。因爲 鍵可以包含字符串,散列, 列表,集合和有序集合,所以它通常被稱爲 作爲數據結構服務器。

    這是非常強大的。

  • 非常容易安裝:make
  • 幾乎所有的首選語言都有c-bindings。
  • c客戶端庫hiredis非常用戶友好。如果你想要非常好的表現,你可以用C寫一些東西。 This example(感謝hiredis)我創建的只是使用make編譯。
1

由於需要什麼的性質,我不認爲這是一個專門爲MTA職責開箱即用的解決方案,但是我可能是錯的。

我已經構建了類似的最近,它涉及將電子郵件發送到一個字段的數據庫隊列,以顯示它是否已發送,然後運行CRON作業來處理髮送腳本的設置批次,發送這些電子郵件,並標記爲發送,沖洗並重復。

有興趣通過電子郵件/ MSN與你聊天,看看你已經爲系統計劃了什麼,因爲我基本上都在做同樣的事情。