我有一个Java 1.7系统,该系统使用Apache commons-email-1.0.jar通过SMTP
中继发送电子邮件。我曾经捕获并跟踪有效错误,例如
SMTPAddressFailedException: 550 5.1.1 user unknown
。
但是,SMTP
中继最近从使用Exchange 2010切换到了Exchange2016。自从这样做以来,我再也不会收到任何错误。我所有的电子邮件都已发送到中继,然后它们失败了而没有提醒我。我需要了解此升级可能发生的变化并进行修复,以使我再次收到这些错误消息。
为了澄清:我发送电子邮件很好。发送带有有效地址的电子邮件没有任何问题,唯一的问题是它不再告诉我该地址何时无效。
我的htmlEmail.send()
周围有一个try-catch块,应该捕获这些错误。过去,如果电子邮件地址无效,将触发catch(EmailException e)
。没有代码更改完成,只有配置更改为使用新的SMTP
中继。与中继人员核对之后,他们说唯一更改的是从Exchange 2010到Exchange 2016的升级。由于我的系统使用的是Apache commons-email-1.0.jar,因此我尝试检查其兼容性以查看其是否兼容。 Exchange 2016出现问题,但找不到足够的文档。我还测试了防火墙,但是那里的一切似乎都是正确的。
private boolean sEmail(){
HtmlEmail htmlEmail = null;
htmlEmail = new HtmlEmail();
htmlEmail.setHostName(mailHostname);
htmlEmail.addTo(emailAddress);
...
try{
...
htmlEmail.setFrom(fromAddress, fromName);
htmlEmail.setMsg(content);
htmlEmail.attach(attachment);
htmlEmail.send();
}catch(EmailException e){
LogService.error("Error!" + e);
}finally{
...
}
}
我希望收到这样的错误消息:
Error! Sending the Email to the following server failed : Relay.com:25
org.apache.commons.mail.EmailException: Sending the email to the
following server failed: Relay.com:25
at org.apache.commons.mail.Email.sendMimeMessage(Email.java)
at org.apache.commons.mail.Email.send(Email.Java)
at com.code.EmailSender.sEmail(Unknown Source)
...
Caused by:
javax.mail.SendFailedException: Invalid Address; nested exception is:
com.sun.mail.SMTPAddressFailedException: 550 5.1.1 User Unknown
...
相反,我每次都会收到成功消息。
从中继端,他们看到:
550 5.1.10 RESOLVER.ADR.RecipientNotFound; Recipient not found by SMTP address lookup...
我的系统没有看到这种情况,除非询问他们,否则我永远不会知道。