将电子邮件退回到其他电子邮件地址

时间:2015-08-06 08:13:00

标签: java email smtp javamail

我在smtp设置了邮件服务器mail.example.com。尝试发送电子邮件,邮件服务器正确发送邮件。

但如果电子邮件反弹,我希望他们在另一个电子邮件地址阅读,这就是一个Gmail地址。所以我已经尝试过这样做了

SMTPMessage sMTPMessage = new SMTPMessage(mailSession);

sMTPMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
sMTPMessage.setFrom(new InternetAddress(from));
sMTPMessage.setSubject(subject);
sMTPMessage.setContent(body, contentType);
sMTPMessage.setEnvelopeFrom(bounceAddr);


SMTPTransport smtpTrans = new SMTPTransport(mailSession, new URLName("smtp", smtpServer, port, null, userid, password));

smtpTrans.connect();
smtpTrans.sendMessage(sMTPMessage, sMTPMessage.getAllRecipients());
System.out.println("transport "+smtpTrans.getReportSuccess());
smtpTrans.close();

但它没有奏效。所以我没有收到反弹电子邮件信息。此外,我尝试设置mail.smtp.from属性也没有用。

我也看到了这个

props.put("smtp.mail.from", bounceAddr);

但来自电子邮件地址不在邮件服务器上,而是在我的Gmail地址上。那么来自地址域有什么问题吗?

1 个答案:

答案 0 :(得分:0)

如果您正在使用属性,请确保您的属性名称中没有拼写错误,如上所述。

您可以通过打开JavaMail session debugging并在调试输出中的SMTP协议中查找MAIL命令来确保JavaMail正在使用您指定的信封发件人地址。

但真正的问题可能是:

  1. 并非所有邮件服务器都尊重此信息,即使它们也是如此 应该。
  2. 从邮件服务器开始到目标邮件服务器的邮件服务器之一可能在转发邮件时没有转发此信息,从而使邮件服务器在没有信息的情况下检测到问题而无法将错误消息返回给适当的地方。
  3. 您的邮件服务器可能不会遵守此信息,因为它不是您的邮件服务器管理的域中的电子邮件地址。
  4. 通过检查邮件服务器的配置和行为,可以解决其中一些问题。但最终,当您发送到无效地址时,您根本不能依赖于始终收到错误消息。

    您可以在JavaMail FAQ

    中找到更多信息