首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用JavaMail将返回路径设置为电子邮件地址而不是发件人地址?

如何使用JavaMail将返回路径设置为电子邮件地址而不是发件人地址?
EN

Stack Overflow用户
提问于 2009-11-23 19:48:11
回答 3查看 20.8K关注 0票数 17

如何使用JavaMail将返回路径设置为电子邮件地址而不是发件人地址?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-11-23 20:02:45

下面的代码做了你想做的事情,而且是以正确的方式做的。重读你自己在评论中发布的内容

来自:RFC2821: 4.4 Trace Information

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

然后再过几行。

发出邮件的系统不应发送已包含返回路径标头的邮件。

如果您仔细阅读本文,您将理解只有最终的smtp服务器/传递代理才会添加Return-Path头。这不是你作为客户端(试图发送邮件)应该做的事情。最终的smtp服务器将基于信封(SMTP MAIL FROM部分)的发送者地址来创建Return-Path报头。

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

如果您在理解不同的from时遇到问题,只需查看telnet smtp-session。

代码语言:javascript
运行
复制
telnet smtp.example.com 25 
220 smtp.example.com ESMTP .....

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

mail from:<replyto@example.com>
250 <replyto@example.com> is syntactically correct

rcpt to:<rcpt@foo.com>
250 <rcpt@foo.com> verified

data
354 Enter message, ending with "." on a line by itself
To: Joey <to@joey.com>
From: Joey <from@example.com> 
Subject: Joey

Hey Joey!

.
250 OK id=....

Quit

代码语言:javascript
运行
复制
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"));
票数 26
EN

Stack Overflow用户

发布于 2013-09-26 22:17:10

我也遇到过同样的问题,我发现讨论的唯一解决方案是将属性"mail.smtp.from“props.put("mail.smtp.from","replyto@example.com");

尽管如此,这个解决方案还是不适合我,因为我要从不同的用户那里发送大量的电子邮件,所以为每个电子邮件重新创建会话对于预测来说是非常糟糕的。

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

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

2)使用setEnvelopeFrom(String)方法。

3)使用SMTPTransport发送邮件(我没有尝试过)。

下面是一个代码示例:

代码语言:javascript
运行
复制
SMTPMessage message = new SMTPMessage(session);
message.setEnvelopeFrom("returnpath@hotmail.com");
...
transport.sendMessage(message, message.getAllRecipients());
票数 8
EN

Stack Overflow用户

发布于 2019-06-18 03:29:12

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

代码语言:javascript
运行
复制
props.put("mail.smtps.from", "replyto@example.com");

这让我可以避免使用GiorgosDev的答案中描述的SMTPMessage类( 'com.sun‘包中的类并不是公共API)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1782659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档