2010-10-28 84 views
3

我們正在開發一個web應用程序,需要發送用Java/Groovy編寫的電子郵件。目前,我們將每封電子郵件都保存到數據庫,然後再調用Java郵件API將郵件發送到我們的SMTP服務器。從數據庫發送電子郵件的工具

我希望異步發送電子郵件。我想堅持電子郵件,然後讓另一個進程接收電子郵件併發送(並只發送一次)。理想情況下,這個過程運行在我的webapp之外。

有沒有做任何工具?

更新:此解決方案需要防止重複的電子郵件,它需要處理電子郵件中的尖峯。我希望有人已經寫了一個離線電子郵件處理器。如果您使用的Linux/Unix,你可以創建一個cron作業到調用程序從數據庫中抓取郵件並送出運行每隔幾分鐘(我寧願沒有這個工具我自己。)

+0

數據庫中的電子郵件是否完整,還是必須與模板合併? – 2010-10-28 02:55:45

+0

其完整。我們已經完成了所有的預處理。 (現在它只有一個文本郵件) – Tihom 2010-10-28 02:58:44

+0

你使用grails嗎?或只是groovy? – 2010-10-28 04:03:35

回答

4

使用cron作業來讀取數據庫的建議是挺管用的。

另一個好方法這裏是使用Java消息服務(JMS)消息隊列。這些是持久的(由數據庫備份)並且可靠。您可以讓一個或多個生產者程序使用其中的相關數據排隊消息,然後一個或多個消費者處理消息並將其出列。所有這些設置都具有非常高的可靠性,並且您可以獲得異步解耦操作的靈活性,這意味着在電子郵件尖峯期間,消息隊列可以變大,直到消費者趕上峯值。另一個好處是,一旦消費者獲得該電子郵件而不是計時器,電子郵件就會消失。另外,如果您需要高可用性,則可以讓多個使用者在發生故障時使用。

退房Apache的ActiveMQ一個很好的開源實現JMS的。

1

。您也可以在數據庫中有一個字段來指示消息是否已發送。這種方法的缺點是,從Web應用程序持續發送電子郵件和執行cron作業時起,可能會有幾分鐘的延遲。

0

設置cron作業和使用腳本來查詢數據庫,並通過sendmail的發送電子郵件。

0

你可以使用石英,調度庫(cron類似),計劃一個重複的任務,讀取數據庫併發送電子郵件。如果您使用的是Grails,那麼Quartz插件可以使Quartz更加有效地使用Groovy。

相關問題