簡體   English   中英

如果關閉不當,Java應用程序如何知道發送了哪些電子郵件

[英]How can a Java application know what emails were sent, in the event of an improper shutdown

我有一個Web應用程序,可以發送電子郵件以涵蓋各種功能,就像許多應用程序一樣。 它利用JavaMail API來發送消息。

一些電子郵件是根據用戶事件(提交表單等)發送的,而另一些則在應用程序的生命周期中異步發送。

現在,我的應用可能隨時都可以關閉,主要是通過停止servlet容器。 如果jvm進程被殺死或服務器關閉或電源中斷,它也會突然掉線。

我的問題是嘗試發送電子郵件時它掉線的情況。 重新啟動應用程序后,如何知道發送了一封電子郵件,從而避免了發送重復郵件或沒有發送重復郵件,因此可以重新發送?

任何幫助,想法和建議,不勝感激。

謝謝

您將需要一種機制,該機制可以可靠地說明需要從此處進行的操作。 這通常是某種數據庫(Derby是Java中的嵌入式數據庫)。

關於是否已發送給定的電子郵件,請讓真實的SMTP服務器進行實際的傳遞,然后讓您的應用程序發送至該服務器,並考慮是否已接受SMTP服務器,以將其標記為已發送到您的應用程序中。

郵件不是事務性的,因此您需要確定需要處理哪些故障以及在某些故障情況下是否可以重復郵件。

一旦將消息提供給郵件服務器進行發送,即使郵件服務器接受了該消息並最終將其發送,許多事情也有可能失敗。 發生故障后,幾乎不可能知道郵件服務器是否接受了該郵件。 最簡單的方法是在這種情況下重新發送消息,並希望失敗很少發生,以至無所謂。 當然,這意味着您要跟蹤要發送的消息,因此可以在必要時重新發送它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM