2011-11-28 9 views
3

我試圖找到一個解決方案,這有任何運氣,所以我決定在這裏發佈。當通過JavaMail發送郵件時正在替換消息標識

問題是,當我使用javaMail發送郵件時,它會自動生成一個Message-Id(我將其存儲到我的數據庫中以識別對此郵件的回覆),但由於某些原因服務器當消息發送,所以我不能跟蹤任何與此消息相關的信息。

例如

我第一次通過Gmail發送消息給我的郵件客戶端sycronized其中一個帳戶,然後我檢查的消息,我的消息客戶端,一切都OK郵件ID是

<[email protected]om>

然後,我通過我的消息客戶端發送該郵件的回覆,由JAVAMAIL生成的ID是

<[email protected]>

最後,當我去檢查的回覆我的電子郵件帳戶,它有它的頭以下值

Message-ID: <[email protected]>失敗

In-Reply-To: <[email protected]om> OK

正如你看到的,郵件ID改變,我期待它是

<[email protected]>

這究竟是爲什麼?

我感謝所有幫助

謝謝大家

- 編輯

根據sugestions我使用smtpsend演示從JAVAMAIL做了一個試驗(我實現的MimeMessage的子類來生成自己的留言-ID)。

java -jar -Dmail.smtp.starttls.enable=true -Dmail.smtp.port=587 SMTPSend.jar -d -M smtp.live.com -U myaccount[email protected] -P mypass -o [email protected] -A [email protected]

smtpsend輸出之間發送消息時,又出現了郵件ID生成

<[email protected]>

但是,當我去檢查該消息上[email protected],郵件ID是不同

<[email protected]>

爲什麼它是否正在改變我的Message-Id ...我不明白

- 編輯2

我注意到,現在的問題只是發生的事情時,我從一個Hotmail帳戶 消息ID不再改變,當我從Gmail帳戶發送電子郵件(發送郵件我認爲,實現我自己的消息ID生成方法有助於解決)

感謝回答

+0

我看到同樣的事情與Outlook/Hotmail現在使用C#和OpenPop。 Message-ID至少部分基於發送它的SMTP服務器被ID覆蓋。例如...'Message-ID:<[email protected]> BLU0-SMTP238.phx.gbl通過Microsoft SMTPSVC(6.0.3790.4675)通過TLS安全通道從myBox([111.111.111.111])收到: ;'都是'BLU0-SMTP238'。 /嘆了口氣,最後我在電子郵件中添加了另一個標題,其中包含我已知的用於hotmail/outlook的唯一字符串。 – ruffin

+0

從Microsoft電子郵件帳戶發送時,我遇到同樣的問題。你有沒有解決你的問題? –

回答

0

您的郵件服務器壞了。它不應該更改Message-ID標題。 將問題報告給郵件服務器的所有者。

+0

我不認爲它的服務器問題,因爲我已經測試了不同的帳戶,(Gmail和Hotmail帳戶),它可能是格式javaMail正在產生這個消息ID,所以當它到達SMTP服務器,它檢測到這種格式爲無效然後再生它?謝謝 – Juan

+0

如果您看到使用不同郵件服務器的相同行爲,則發生其他問題。我可以確認,當我使用JavaMail通過Gmail發送郵件時,Message-ID標題被保留。也許你有一些防火牆或防病毒軟件在發送消息時修改消息?告訴我們更多關於您測試的內容以及您連接到郵件服務器的詳細信息。您可以使用JavaMail附帶的smtpsend.java演示程序來重現問題嗎? –

+0

感謝您的回覆,請查看我對原始帖子所做的修改 – Juan

1

我知道這是一個古老的線程,但這個答案仍然可能幫助人們。

您需要推遲MimeMessage中的updateMessageID(),因爲每次在發送電子郵件之前都會調用它。

class MyMessage extends MimeMessage { 

    public MyMessage(Session session) { 
     super(session); 
    } 

    protected void updateMessageID() throws MessagingException { 
     setHeader("Message-ID", "<[email protected]>"); 
    } 
} 

如果你想傳遞的唯一ID的每個MyMessage ...

class MyMessage extends MimeMessage { 
     String uniqueMessageId;  

     public MyMessage(Session session, String uniqueMessageId) { 
      super(session); 
      this.uniqueMessageId = uniqueMessageId; 

     } 

     protected void updateMessageID() throws MessagingException { 
      setHeader("Message-ID", "<" + uniqueMessageId + ">"); 
     } 
    } 

然後調用它,如:

MyMessage message = new MyMessage(session, "[email protected]"); 
相關問題