Не удается отправить почту, ошибка тайм-аута подключения - PullRequest
0 голосов
/ 06 мая 2020

У меня есть функция отправки почты с помощью java mail API. Он работает в локальной среде. Но когда я развертываю экземпляр aws, он выдает ошибку. Сначала я подумал, что соединение с экземпляром aws с почтовым сервером не разрешено. Но с экземпляра aws он может телепортироваться на почтовый сервер с портом 587. Я также попытался увеличить параметр тайм-аута, но все еще то же исключение, исключение тайм-аута сокета. Пожалуйста, помогите мне исправить, если моя конфигурация неверна.

Вот зависимость, которую я использовал.

<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.6.2</version>
</dependency>

Вот конфигурация почты.

public static boolean sendMail() {

        Properties props = getSMTPProperties(HOST);
        Session session = Session.getInstance(props, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(SENDER, PWD);
            }
        });

        try {
            Message message = createMessage(session, SENDER_EMAIL, RECEIVER, "testing", "testing");
            Transport.send(message);

            Store store = session.getStore("imap");
            store.connect(HOST, SENDER, PWD);
            Folder folder = store.getFolder("Sent Items");
            folder.open(Folder.READ_WRITE);
            folder.appendMessages(new Message[]{message});
            store.close();
        } catch (MessagingException e) {
            log.info("Cannot send" + e.getCause().getMessage());
        }
        return true;
    }

    private static Properties getSMTPProperties(String smtpHost) {
        Properties props = new Properties();

        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.ssl.trust", smtpHost);
        props.put("mail.smtp.host", smtpHost);
        props.put("mail.smtp.port", "587");
        props.put("mail.transport.protocol", "smtp");
        props.put("mail.debug", "true");
        props.put("mail.smtp.connectiontimeout", "20000");
        props.put("mail.smtp.timeout", "20000");

        props.put("mail.imap.starttls.enable", "true");
        props.put("mail.imap.ssl.trust", smtpHost);
        return props;
    }


    private static Message createMessage(Session session, String from, String[] recipients, String subject, String body)
            throws MessagingException {

        Message message = new MimeMessage(session);
        message.addHeader("Content-type", "text/HTML; charset=UTF-8");
        message.addHeader("format", "flowed");
        message.addHeader("Content-Transfer-Encoding", "8bit");

        message.setFrom(new InternetAddress(from));

        Address[] addresses = new Address[recipients.length];
        for (int i = 0; i < recipients.length; i++) {
            addresses[i] = new InternetAddress(recipients[i]);
        }
        message.addRecipients(Message.RecipientType.TO, addresses);

        message.setSubject(subject);
        message.setContent(body, "text/html; charset=utf-8");

        return message;
    }

Вот ошибка

2020-05-06 08:55:51,601 INFO  [stdout] (default task-58) DEBUG: successfully loaded resource: /META-INF/javamail.default.providers
2020-05-06 08:55:51,601 INFO  [stdout] (default task-58) DEBUG: Tables of loaded providers
2020-05-06 08:55:51,601 INFO  [stdout] (default task-58) DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle]}
2020-05-06 08:55:51,602 INFO  [stdout] (default task-58) DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]}
2020-05-06 08:55:51,602 INFO  [stdout] (default task-58) DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
2020-05-06 08:55:51,604 INFO  [stdout] (default task-58) DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]
2020-05-06 08:55:51,608 INFO  [stdout] (default task-58) DEBUG SMTP: need username and password for authentication
2020-05-06 08:55:51,608 INFO  [stdout] (default task-58) DEBUG SMTP: protocolConnect returning false, host=mail.dummy.local, user=wildfly, password=<null>
2020-05-06 08:55:51,609 INFO  [stdout] (default task-58) DEBUG SMTP: useEhlo true, useAuth true
2020-05-06 08:55:51,609 INFO  [stdout] (default task-58) DEBUG SMTP: trying to connect to host "mail.dummy.local", port 587, isSSL false
2020-05-06 08:56:21,627 ERROR [stderr] (default task-58) com.sun.mail.util.MailConnectException: Couldn't connect to host, port: mail.dummy.local, 587; timeout 30000;
2020-05-06 08:56:21,627 ERROR [stderr] (default task-58)   nested exception is:
2020-05-06 08:56:21,627 ERROR [stderr] (default task-58)    java.net.SocketTimeoutException: connect timed out

1 Ответ

0 голосов
/ 26 мая 2020

Мы столкнулись с аналогичной проблемой и заставили ее работать после перехода на javax.mail: mail: 1.4.5.

Чтобы дать вам больше информации, у нас был javax.mail 1.4.5. from org. apache .commons: commons-email: 1.3.2 и javax.mail 1.6 из javax: javaee-api: 8.0

У нас был модуль, работавший с 1.4.5, так что это был единственный разница.

Вы можете попробовать это.

...