2010-02-17 67 views
4

我正在運行一個Web服務,該服務當前通過gmail smtp服務器向新用戶發送確認電子郵件。由於我每天只有幾個新用戶,這不成問題。從網絡服務發送自動每日電子郵件的最佳做法

我最近爲webapp添加了新功能,需要每天向每個用戶發送定製消息。可以認爲這與LinkedIn發送的常規消息類似,可以爲您提供關於網絡活動的狀態報告。每個用戶的消息都會有所不同。有了成千上萬的用戶,這意味着每天都會發送數千條獨特的消息。

編輯:我後來發現這些類型的電子郵件被稱爲「交易或關係消息」。 Spamtacular有一個很好的article on differentiating between marketing and transactional email

我不認爲使用gmail的smtp服務器會削減它,但我不知道這一點。我不知道每個帳戶的Gmail最大傳出郵件數量是多少(可能是100 /天),但是它們將每封郵件的傳出郵件限制爲500個收件人。我沒有向500位收件人發送單個郵件,但是我將向每位收件人發送1000封自定義郵件,每天收到一封郵件。

我有興趣瞭解這樣做的任何最佳實踐(特別是對於基於Java的webapps)。這裏是我的一些想法和關注它:

  • 我應該建立我自己的傳出郵件服務器?如果我這樣做,看起來我會遇到各種其他問題,比如防止濫用郵件服務器,監控反彈,允許選擇退出電子郵件等等。是否有任何工具或服務可以幫助您有了這個?也許像OpenEMM或MailChimp這樣的服務?但那些似乎更多地關注電子郵件營銷活動。
  • 我不認爲我應該讓webapp自己處理髮送電子郵件,因爲它目前是用於新用戶註冊。我想我應該設置一個單獨的消息服務器,它可以訪問與web應用程序相同的後端/數據存儲。對此有何想法?
  • 我應該考慮設置某種消息隊列服務來幫助解決這個問題,比如JMS,RabbitMQ,ActiveMQ等?
  • 我需要爲用戶提供一種退出方式嗎?我是否需要將這些標記爲批量消息?我沒有真正考慮這些電子郵件營銷信息,但我不確定什麼被認爲是適當的或適當的網絡禮儀。

任何意見表示讚賞。我也對開源工具或Web服務非常感興趣,這些工具或Web服務可以簡化事情,並可以幫助我儘快提高速度。

謝謝!

+0

1000個郵件給一個收件人?我在那裏!當然,這是一個錯字,或者我錯過了一些東西。 – 2010-02-17 21:32:43

+0

我有一個應用程序發送每日更新給我和我的一個朋友(都在Gmail上)。在它開始發送這些郵件後不久,應用程序被標記爲垃圾郵件,我必須轉到我的垃圾郵件框並在它開始回到我的收件箱之前多次將其標記爲非垃圾郵件。我會去讓別人爲你處理。 – 2010-02-17 21:44:00

+0

@不退款不退貨:我認爲你應該把它看作是「成千上萬的郵件,每個郵件都是不同的地址」 – 2010-02-17 21:47:45

回答

4

關於你的第一個問題,是的,你應該建立你自己的郵件服務器。使用gmail來做這件事可能會有一段時間,但他們很可能會在他們看到這種活動時以短時間關閉你。您可以註冊一個商業帳戶並使用應用引擎發送消息。以下是link,其中包含有關該服務的郵件配額的信息。

關於你的第二和第三個問題,將消息放在Web應用程序中排隊並由集中服務發送出去,而不是讓應用程序自己發送消息是個好主意。

通常我只是使用數據庫表作爲隊列 - Web應用程序爲每個要發送的消息插入行。服務/計劃任務應用程序會從表中獲取新消息並將其發送出去。如果您希望稍後切換郵件服務器,可以提供很大的靈活性,如果郵件服務器關閉,則可靠性更高,如果收件人沒有收到郵件時出現問題,則可以更輕鬆地進行診斷,並且可以重新發送郵件。至於使用JMS/MQ來做到這一點 - 可能沒有必要。一個用作隊列的IMO數據庫表會比實際的基於JMS的隊列系統給你更多的靈活性。

至於退出,是的 - 你應該給人一種退出的方式。我不認爲你需要將郵件標記爲批量。

+0

謝謝,這絕對證實了我的想法。 – Tauren 2010-02-18 22:52:41

4

在架構方面,我肯定會考慮通過某種形式的異步消息隊列(或使用數據庫作爲中介的傳真)來解除從主服務發送的電子郵件。這種方法的另一個好處是,如果SMPT服務器\網絡關閉,您可以構建重試語義,另外爲了將來的可伸縮性,您可以實現從同一隊列中讀取多個郵件發件人或實現發送限制或調度(即每小時發送n封郵件)等等等等

+0

關於更容易安排和節流的好處。如果我使用GAE發送郵件,我肯定需要加以限制。謝謝。 – Tauren 2010-02-18 22:53:33

相關問題