不再使用SMTP中继从Java应用程序接收电子邮件错误消息

时间:2019-06-24 14:36:16

标签: java smtp exchange-server html-email apache-commons-email

我有一个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... 我的系统没有看到这种情况,除非询问他们,否则我永远不会知道。

0 个答案:

没有答案