2008-09-29 47 views
16

使用Java郵件,我想發送電子郵件並檢查狀態。可能的狀態包括:發送電子郵件並檢查狀態

  • 硬反彈:沒有郵件服務器發現
  • 軟反彈:郵件服務器中,但找不到帳戶
  • 成功

它甚至有可能發送電子郵件,並以我上面描述的方式獲得關於交付嘗試的一些反饋?

編輯:一位受訪者建議尋找一個Java庫,該庫提供與ListNanny相同的功能。我四處搜尋,但還沒有找到任何東西。任何想法,如果這樣的圖書館存在?

乾杯, 唐

回答

5

你不能這樣做可靠或一致。如果您的本地郵件服務器將其傳遞到企業外出郵件服務器上,然後當該服務器嘗試將其傳遞時它會反彈,會發生什麼情況?如果郵件服務器無法與其他郵件服務器通信,並且郵件在4天后超時,會發生什麼情況?

1

查找郵件服務器和連接:很簡單。檢查帳戶:可能。但這取決於您是否能夠首先訪問郵件服務器。它可能會拒絕你的連接嘗試(例如,因爲您的網絡被列入黑名單)

最複雜的事情就是你所謂的「成功」:

簡短的回答:第

龍答:理論上這將是可能的,但是如果不知道狀態,你將不得不等待幾個小時。使用重名列表,白名單,阻止垃圾郵件的郵件服務器很多隻會在多次投遞嘗試後才接受郵件。只有當郵件終於送達或放棄時,您纔會知道送達的成功。並且取決於郵件服務器負載,發送電子郵件可能被推遲一段任意的時間。

1

我不是專門用Javamail做的,但我會這樣說:即使「成功」也許不會成功。

你對軟硬故障的定義應該足夠簡單來檢查。如果你找不到服務器很難,如果你connet和服務器說「找不到郵箱」它是「軟」。但是如果服務器接受該消息然後稍後反彈呢?許多前端服務器通過設計或必要性接受未知消息(「真實」後端服務器的前端中繼),並且如果稍後發現該消息被髮送到無效地址,則該消息被反彈回發送方。在這種情況下,如果真的不成功,你會發送「成功」的發送。

確保交付幾乎不可能,而不會出現某種嵌入消息中的「點擊此處」。

3

您需要做的是將信封SMTP發件人設置爲您監控NDR郵件的地址。你必須解析他們進來的電子郵件,並弄清楚出了什麼問題。這通常用於郵件列表,像ListNanny這樣的產品用於處理郵件(這是一個.NET產品,但我確定有一個Java等價物,或者你可以自己寫)。

信封「來自」不同於「來自」地址的信息。它是您的代碼和MTA之間發生的SMTP對話的一部分。所有NDR將被髮送到該地址。

+0

ListNanny聽起來像我所需要的。儘管如此,我還沒有找到一個等效的Java庫。 – 2008-09-29 20:11:45

+0

至少在基礎層面上,你自己並不太難做到。如果您可以找到NDR來查看,您會發現一些易於解析的半標準數據塊。知道你有NDR就足夠了。 – 2008-09-29 21:32:16

+0

我對它進行了快速的研究,看起來NDR的具體格式不是標準化的,或者如果是的話,就有很多不兼容的實現。 – 2008-09-29 23:09:28

1

不要依賴於你從服務器返回的信息(如果你回來的話)。

許多郵件服務器現在設置爲而不是由於它創建的安全漏洞,表明收件人是否存在。 (例如,如果一個給定的域名正在報告(「是」/「否」)是否存在電子郵件地址,黑客就會簡單地在服務器上釋放字典攻擊以確定所有有效的用戶,從而他們得到即時垃圾郵件列表

4

如果您發送的是HTML電子郵件,您可能需要在電子郵件中嵌入一個像素透明圖像,圖像URL實際上會引用一個返回圖像的servlet,該URL也會有某種形式消息ID作爲參數 這個想法背後是當用戶讀取消息時,他/她顯示圖像,這會觸發你的servlet,它向db寫入消息已經被讀取。

1

你可以使用http://www.mailcounter.info免費服務,以檢查您的電子郵件是否已被閱讀,以及用戶閱讀了多少次。它是一項免費服務。

1

您應該做的是實際檢查收件人的電子郵件的MX記錄(電子郵件地址的域部分的DNS MX查詢),並通過已解決的SMTP服務器發送郵件。

這樣,如果MX記錄沒有找到,你會得到一個「Hard Bounce」,如果發現它但send方法拋出一個異常,你會得到一個「Soft Bounce」,如果它通過了 - 你獲得「成功」。

您可以使用dnsjava項目來解析MX記錄。 http://www.dnsjava.org/

0

link可能會幫助你。這是一個使用RFC 3642和RFC 3464的實驗性jar文件。它有一些基本的類,可以讓您獲得郵件傳遞狀態。還需要Javamail jar文件。

相關問題