如何使用JavaMail将返回路径设置为发件人地址以外的电子邮件地址?

如何使用JavaMail将返回路径设置为发件人地址以外的电子邮件地址?,java,email,jakarta-mail,Java,Email,Jakarta Mail,如何使用JavaMail将返回路径设置为发件人地址以外的电子邮件地址?下面的代码符合您的要求,并以正确的方式执行。重读你自己在评论中发布的内容 发件人: 当SMTP服务器进行传递时 消息的“最终传递”,它 在指定的位置插入返回路径行 邮件数据的开头。这个用途 返回路径的选择是必需的;邮件 系统必须支持它。这个 返回路径行保留 新闻中的信息 从邮件命令。这里,决赛 传递意味着消息已离开 SMTP环境。通常情况下 就意味着它已经被送到了 目标用户或关联用户 邮件投递,但在某些情况下可能是 进一步处理

如何使用JavaMail将返回路径设置为发件人地址以外的电子邮件地址?

下面的代码符合您的要求,并以正确的方式执行。重读你自己在评论中发布的内容

发件人:

当SMTP服务器进行传递时 消息的“最终传递”,它 在指定的位置插入返回路径行 邮件数据的开头。这个用途 返回路径的选择是必需的;邮件 系统必须支持它。这个 返回路径行保留 新闻中的信息 从邮件命令。这里,决赛 传递意味着消息已离开 SMTP环境。通常情况下 就意味着它已经被送到了 目标用户或关联用户 邮件投递,但在某些情况下可能是 进一步处理和传输 另一个邮件系统

几行之后

源于SMTP系统的邮件 不应发送已发送的消息 包含返回路径标头

如果仔细阅读,您将了解到只有最终的smtp服务器/传递代理应该添加
返回路径
头。这不是你作为客户(试图发送邮件)应该做的事情。最后一个smtp服务器将根据信封的发件人地址(
smtp邮件发件人
部分)创建
返回路径

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

如果您在理解
的不同之处时遇到困难,请查看telnet smtp会话。其中
replyto@example.com
应对应于
smtp.mail.from
from@example.com
to
m.addFrom(…)


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

但这个解决方案并不适合我,因为我从不同的用户那里发送了大量的电子邮件,所以为每封电子邮件重新创建会话对生产率来说是可怕的

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

1) 使用SMTPMessage(扩展MimeMessage)代替MimeMessage

2) 使用setEnvelopeFrom(字符串)方法

3) 使用SMTPTransport发送电子邮件(我没有尝试与其他人一起发送)

下面是一个代码示例:

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

我发现,如果将“mail.protocol”属性设置为“smtp”以外的内容(如“smtps”),则只有以下内容可以工作:

props.put("mail.smtps.from", "replyto@example.com");

这使我避免了使用GiorgosDev的回答中描述的SMTPMessage类(“com.sun”包中的类不打算成为公共API)。

我相信这将是解决方案。但据我所知,邮件服务器必须支持它。“当传递SMTP服务器对邮件进行“最终传递”时,它会在邮件数据的开头插入一个返回路径行。这种返回路径的使用是必需的;邮件系统必须支持它。返回路径行保留邮件命令中的信息。”,这是唯一对meThis有效的解决方案,当“mail.smtp.from”方法不起作用时,它对我有效。谢谢令人愉快。你的具体问题是什么?第一个答案对我来说并不适用;第二个是黑客;这一个对我有用(我使用smtps而不是smtp作为“mail.protocol”)。。。我只是想和你分享。。。
SMTPMessage message = new SMTPMessage(session);
message.setEnvelopeFrom("returnpath@hotmail.com");
...
transport.sendMessage(message, message.getAllRecipients());
props.put("mail.smtps.from", "replyto@example.com");