Ric*_*rdo 17 java email jakarta-mail
如何使用JavaMail将Return-Path设置为发件人地址以外的电子邮件地址?
jit*_*ter 24
下面的代码可以满足您的需求,并以正确的方式完成.重读你自己在评论中发布的内容
当传递SMTP服务器进行消息的"最终传递"时,它会在邮件数据的开头插入一个返回路径行.需要使用返回路径; 邮件系统必须支持它.返回路径行保留MAIL命令中的信息.此处,最终传递意味着邮件已离开SMTP环境.通常,这意味着它已被传递给目标用户或相关的邮件丢弃,但在某些情况下,它可能会被另一个邮件系统进一步处理和传输.
然后几行.
发起消息的SMTP系统不应该发送已经包含返回路径头的消息.
如果您仔细阅读本文,您将了解只有最终的smtp-server/delivery代理才能添加Return-Path标题.这不是你作为客户端(试图发送邮件)应该做的事情.最终的smtp-server将Return-Path标题基于信封的发件人地址(SMTP MAIL FROM部分).
所以设置mail.smtp.from是告诉java信封发件人地址应该与from部件不同的正确方法.
如果你有麻烦了解不同from的东西,只需看一下telnet smtp-session.凡replyto@example.com应符合smtp.mail.from并from@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:<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
Run Code Online (Sandbox Code Playgroud)
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"));
Run Code Online (Sandbox Code Playgroud)
我遇到了同样的问题,并找到了讨论将物品"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());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18094 次 |
| 最近记录: |