如何使用JavaMail将Return-Path设置为发件人地址以外的电子邮件地址?

如何使用JavaMail将Return-Path设置为发件人地址以外的电子邮件地址?

下面的代码可以满足您的需求,并以正确的方式完成。 重读你自己在评论中发布的内容

来自: RFC2821:4.4跟踪信息

当传递SMTP服务器进行消息的“最终传递”时,它会在邮件数据的开头插入一个返回路径行。 需要使用返回路径; 邮件系统必须支持它。 返回路径行保留MAIL命令中的信息。 此处,最终传递意味着邮件已离开SMTP环境。 通常,这意味着它已被传递给目标用户或相关的邮件丢弃,但在某些情况下,它可能会被另一个邮件系统进一步处理和传输。

然后几行。

发起消息的SMTP系统不应该发送已经包含返回路径头的消息。

如果您仔细阅读本文,您将了解只有最终的smtp-server / delivery代理才能添加Return-Path标头。 这不是你作为客户端(尝试发送邮件)应该做的事情。 最终的smtp-server将Return-Path信封的发件人地址( SMTP MAIL FROM部分)上的Return-Path标头。

因此,设置mail.smtp.from是告诉java信封发件人地址应与from部分不同的正确方法。

如果你有麻烦了解不同的东西,只需看一下telnet smtp-session。 其中replyto@example.com应与smtp.mail.fromfrom@example.com对应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: 250  is syntactically correct rcpt to: 250  verified data 354 Enter message, ending with "." on a line by itself To: Joey  From: Joey  Subject: Joey Hey Joey! . 250 OK id=.... Quit 

 props.put("mail.smtp.from", "replyto@example.com"); Session session = Session.getDefaultInstance(props, null); MimeMessage m = new MimeMessage(session); m.addFrom(InternetAddress.parse("from@example.com")); 

我遇到了同样的问题,并找到了唯一的解决方案,讨论了将属性“mail.smtp.from”props.put(“mail.smtp.from”,“replyto@example.com”);

仍然这个解决方案不适合我,因为我从不同的用户那里发送很多电子邮件,因此为每个电子邮件重新创建会话对于推销性来说是可怕的。

所以我在阅读JavaMail源代码后找到了另一个解决方案:

1)使用SMTPMessage(扩展MimeMessage)而不是MimeMessage。

2)使用setEnvelopeFrom(String)方法。

3)使用SMTPTransport发送电子邮件(我没有尝试与他人合作)。

这是一个代码示例:

 SMTPMessage message = new SMTPMessage(session); message.setEnvelopeFrom("returnpath@hotmail.com"); ... transport.sendMessage(message, message.getAllRecipients());