2013-07-09 18 views
3

從你的應用程序發送郵件是很常見的事情,在大多數情況下,它是一個真正的痛苦......你知道在哪裏。從java代碼發送郵件 - 可靠的方式

所以我在做的是採用Apache Commons Email(它是基於「官方」java郵件API的頂部),並且我以最簡單的方式發送電子郵件,也就是說,沒有通過身份驗證smtp服務器。我只是對目標主機名進行簡單的MX查找,獲取MX服務器並嘗試在第一個郵件中放棄我的郵件(郵件被拒絕與否是完全不同的問題,我可能會很快提出有關整個搞砸了return-path:vs:from:vs. reply-to:以及這些頭文件在java中處理的方式)。回到企業......所以我只是試圖在郵件服務器上放棄我的郵件,並且得到最少的偏好分數。我想寫[email protected]。 MX查找告訴我,domain.com知道兩個MX服務器,例如mail1.domain.com優先選擇10並且mail2.domain.com優先選擇20. rfc做事情的方式是首先將服務器放在最不偏好的位置,然後將郵件放在那裏。所以我就是這麼做的。

最後我的問題:如果該服務器不能以某種方式或另一種方式可用會發生什麼?這很簡單 - 我去了另一臺服務器,但Apache Commons(和我懷疑java郵件API)不允許我這樣做。 mail.smtp.host變量植根於電子郵件中的會話的道具中。我無法理解它。

那麼處理這個問題最好的辦法是什麼?我應該使用新的主機名(mail2)從頂部完全構建我的電子郵件嗎?還是有一些聰明的方法可以使這一切都在Java中工作,而沒有太多的痛苦?

回答

1

聽起來如果你試圖實現一個部分郵件服務器,而不僅僅是發送一封電子郵件。路由,中繼,緩存和交付重審是由所有郵件服務器執行和提供的操作,通常不由郵件客戶端完成。

你應該做的是使用(一個!)現有的郵件服務器,它被配置爲允許中繼出站郵件,或者如果你沒有訪問這樣的服務器(我懷疑),安裝和操作你自己的服務器。然後,您配置服務器在mail.smtp.host並忘記了所有您瞭解的DNS查找,服務器優先級以及您擔心如果沒有任何MX服務器可到達時該怎麼辦。

+0

是的,我考慮過使用'aspirin'甚至是'james',甚至是一個功能齊全的「外部」SMTP服務器(但在後一種情況下,每個客戶端都必須建立自己的smtp服務器,現在有很多方法可以從客戶那裏得到:)),但是解決這樣一個簡單問題似乎太過矯枉過正了。或者,也許只是我的「簡單」和「矯枉過正」的概念是傾斜的:) – ingenious

+0

我不知道你的軟件應該運行在哪裏,或者你在談論哪種類型的客戶端,但是如果你的軟件需要發送外發郵件,恕我直言,沒有太多要求提供正在運行的SMTP服務器。公司有一個SMTP服務器在運行,哪個家庭用戶無法從互聯網訪問提供商或「純」郵件提供商(如GMail或Hotmail)訪問SMTP服務器? – jarnbjo

+0

我同意,使用現有的電子郵件服務器。如果您仍然想自己做,可能需要直接使用JavaMail API,以便您可以使用Transport.connect方法直接連接到所需的任何服務器。 –