2009-11-23 94 views

回答

20

下面的代碼做你想做的,並以正確的方式做到這一點。重讀你自己張貼在評論什麼

來源:RFC2821: 4.4 Trace Information

在配送SMTP服務器使得消息的 「最終交付」,它 在 開始插入一個返回路徑行郵件數據。這個使用 的返回路徑是必需的;電子郵件 系統必須支持它。 返回路徑行通過MAIL命令保留 中的信息 。在這裏,最後的 傳遞意味着郵件已經離開 SMTP環境。通常,這個 將意味着它已經被傳送到 目的地用戶或相關聯的 郵件丟失,但是在某些情況下它可能被 進一步處理並通過 傳送另一個郵件系統。

和幾行後。

消息,發起SMTP系統 不應發出已 包含返回路徑頭的消息。

如果您仔細閱讀本文,您將會理解只有最終的smtp-server/delivery代理應該添加Return-Path標頭。這不是你作爲客戶(試圖發送郵件)應該做的事情。最後的smtp服務器將把Return-Path標題作爲信封的發件人地址(SMTP MAIL FROM部分)。

因此,設置mail.smtp.from是告訴java信封發件人地址應該與from部分不同的正確方法。

如果你有麻煩了解不同的from的只是看看一個telnet smtp會話。凡[email protected]應符合smtp.mail.from[email protected]m.addFrom(...);

telnet smtp.example.com 25 
220 smtp.example.com ESMTP ..... 

helo computername 
250 smtp.example.com Hello computername [123.123.123.123] 

mail from:<[email protected]> 
250 <[email protected]> is syntactically correct 

rcpt to:<[email protected]> 
250 <[email protected]> verified 

data 
354 Enter message, ending with "." on a line by itself 
To: Joey <[email protected]> 
From: Joey <[email protected]> 
Subject: Joey 

Hey Joey! 

. 
250 OK id=.... 

Quit 

props.put("mail.smtp.from", "[email protected]"); 
Session session = Session.getDefaultInstance(props, null); 
MimeMessage m = new MimeMessage(session); 
m.addFrom(InternetAddress.parse("[email protected]")); 
+0

我相信這將是解決辦法。但從我閱讀的內容來看,郵件服務器必須支持它。 「當傳送SMTP服務器對郵件進行」最終傳送「時,會在郵件數據的開頭插入一個返回路徑行,需要使用返回路徑;郵件系統必須支持它;路徑行保留MAIL命令的中的信息。「在http://www.ietf.org/rfc/rfc2821.txt – Ricardo 2009-11-23 15:42:56

+0

查看擴展的答案 – jitter 2009-11-23 16:15:10

+0

我一直在嘗試在許多其他級別的代碼上這樣做,這是唯一的解決方案已經爲我工作 – kommradHomer 2017-07-13 15:10:24

6

我已經經歷了同樣的問題,找到了唯一的解決辦法討論把財產「mail.smtp.from」 props.put(」 mail.smtp.from「,」[email protected]「);

仍然這種解決方案不適合我,因爲我發送很多來自不同用戶的電子郵件,因此爲每個電子郵件重新創建會話對於prodictivity來說都是可怕的。

所以我發現另一種解決辦法閱讀JavaMail的來源後:

1)使用SMTPMessage(擴展的MimeMessage)代替的MimeMessage。

2)使用setEnvelopeFrom(String)方法。

3)使用SMTPTransport發送電子郵件(我沒有嘗試與其他人)。

這裏是一個代碼示例:

SMTPMessage message = new SMTPMessage(session); 
message.setEnvelopeFrom("[email protected]"); 
... 
transport.sendMessage(message, message.getAllRecipients()); 
+0

這工作我當「mail.smtp.from」方法沒有。謝謝!愉快。 – Nick 2014-05-27 18:45:55

+0

沒有爲我工作 – Anita 2015-08-06 08:22:12

相關問題