Больше не получать сообщения об ошибках по электронной почте из приложения Java, использующего SMTP relay - PullRequest
0 голосов
/ 24 июня 2019

У меня есть система Java 1.7, которая отправляет электронные письма через ретранслятор SMTP, используя Apache commons-email-1.0.jar. Я привык ловить и отслеживать действительные ошибки, такие как SMTPAddressFailedException: 550 5.1.1 user unknown. Однако ретранслятор SMTP недавно переключился с использования Exchange 2010 на Exchange 2016. С тех пор, как это было сделано, я больше не получаю никаких ошибок. Все мои электронные письма отправляются на ретранслятор, а затем они терпят неудачу, не предупреждая меня. Мне нужно понять, что могло измениться с этим обновлением, и исправить это так, чтобы я снова получал эти сообщения об ошибках.

Чтобы уточнить: я просто отправляю электронные письма. Нет проблем с отправкой электронных писем с действительными адресами, единственная проблема заключается в том, что он больше не сообщает мне, когда адрес является недействительным.

У меня есть блок try-catch вокруг моего htmlEmail.send(), который должен отлавливать эти ошибки. В прошлом 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... Это не замечено моей системой, я никогда не узнаю об этом, пока не спрошу их.

...