2009-11-23 110 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

相关问题