Проверьте аутентификацию SMTP-сервера через java api (Healthcheck, включая AUTH) - PullRequest
0 голосов
/ 12 марта 2020

Цель

Я хочу реализовать проверку работоспособности SMTP-сервера. Эта проверка работоспособности должна включать проверку подлинности, чтобы я знал не только о том, доступен ли сервер, но и о том, смогу ли я отправлять электронные письма с использованием данного сертификата.

Я понимаю, что это возможно при использовании Te lnet.

Если возможно, я бы хотел что-то более высокого уровня. В настоящее время я использую javax.mail.Session, javax.mail.Transport, et c.

Вопросы

Можно ли проверить, будет ли (вероятно) SMTP-сервер принимать мой запрос от проверка подлинности с использованием сертификата, без отправки чего-то вроде тестового сообщения на сервер с использованием простого java API?

Также у меня есть еще один вопрос: следует ли мне использовать сеанс для MimeMessage, а затем отправлять их с помощью stati c Transport # метод отправки. Или я могу использовать что-то, где я получаю экземпляр. Главное, чего я хотел бы добиться, это получить код возврата с сервера также в успешных случаях.

Я также согласен с использованием другой библиотеки.

Для справки приведу некоторый код того, как я Готовлю сеанс и сообщения атм.

public class SmtpMailService {

    public Session prepareSession() {
        Properties properties = new Properties();
        properties.put("mail.smtp.host", host);
        properties.put("mail.smtp.port", port);
        return Session.getInstance(properties, null);
    }

    public List<MimeMessage> sendMessages(List<MimeMessage> messages) {
        Iterator<MimeMessage> m = messages.iterator();

        while (m.hasNext()) {
            MimeMessage currentMessage = m.next();
            try {
                Transport.send(currentMessage);
                m.remove();
            } catch (MessagingException e) {
                break;
            }
        }

        List<MimeMessage> mailsWithError = StreamUtils.asList(m);
        return mailsWithError;
    }
}

И как мне тогда отправлять письма.

public class SmtpMailSenderService {
    private SmtpMailService mailerService;

    public List<SmtpEmailNotificationRecipient> sendNotificationMails(final List<SmtpEmailNotificationRecipient> recipients,
            final SmtpMailTemplate templateId, final Map<String, String> templateValues) {

        // templating stuff

        final Session smtpSession = mailerService.prepareSession();
        final List<MimeMessage> messages = mailerService.prepareMessages(smtpSession, recipients, email);

        final List<MimeMessage> unsentMessages = mailerService.sendMessages(messages);

        return collectRemainingRecipients(unsentMessages);
    }
}

1 Ответ

0 голосов
/ 14 марта 2020

Вы не можете сказать, позволит ли сервер отправлять почту без фактической отправки почты. И тогда получатель также будет иметь значение.

Вы можете заставить JavaMail выдать исключение в случае успеха, и оно будет включать код возврата. Установите для свойства mail.smtp.reportsuccess Session значение true. См. smtpsend. java пример программы.

Если у вас уже есть транспортный объект, его вполне можно использовать вместо метода отправки * stati c.

...