Проблема с жестким отскоком Java Mail SMTP

Мы используем JavaMail 1.5 API для отправки писем. Хост SMTP, который мы используем для разработки, не имеет списка подавления, следовательно, если какие-либо электронные письма будут недействительными, например «xyz@xyz.com», и, хотя он будет возвращен, мы получим его в исключении,

но если мы попробуем prod SMTP-сервер, у которого есть список подавления, тот же адрес электронной почты «xyz@xyz.com» приведет к тому, что другие электронные письма НЕ будут отправлены, если они являются частью того же списка TO, например, «valid @ domain». com; xyz@xyz.com ", мы ожидаем, что хотя бы"valid@domain.com"должен получить письмо, но даже оно не отправляется и getInvalidAddresses() нулевой

com.sun.mail.smtp.SMTPAddressFailedException: 254 4.7.1 - xyz@xyz.com is suppressed for sender smtp.xxx.xxx

      public class SendMail {
    public static void main(String[] args) {
        final String username = "username@domain.com";
        final String password = "xxxxxxxxxxxx";
        Properties prop = new Properties();
        prop.put("mail.smtp.host", "mysmtp.domain.com");
        prop.put("mail.smtp.port", "25");
        prop.put("mail.smtp.auth", "true");
        prop.put("mail.smtp.sendpartial", "true");
        prop.put("mail.smtp.socketFactory.port", "25");
        prop.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        Session session = Session.getInstance(prop,
                new javax.mail.Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(username, password);
                    }
                });
        try {
            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress("from@domain.com"));
            message.setRecipients(
                    Message.RecipientType.TO,
                    InternetAddress.parse("valid@domain.com, xyz@xyz.com")
            );
            message.setSubject("Test Mail");
            message.setText("Test Mail");
            Transport.send(message);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }

}

Как мы можем обрабатывать ошибки списка подавления в JavaMail API?

1 ответ

Проблема, с которой вы столкнулись, вызвана кодом возврата 254используется почтовым сервером. Согласно RFC 5321 (самый последний вариант RFC 821) такого кода нет. Этот код возврата кажется изобретением Oracle Email Delivery.

Java Mail (и его преемник Jakarta Mail) интерпретирует (см . исходный код ) unknown:

  • Коды возврата 4xx как validUnsentAddresses,
  • Коды возврата 5xx как invalidAddresses,
  • Коды возврата 2xx означают полную неудачу доставки, поскольку невозможно сделать обоснованное предположение относительно значения кода.

В этом случае сервер, вероятно, должен вернуть 550код, что означает «команда отклонена по причинам политики» .

Другие вопросы по тегам