Java Mail: Тайм-аут операции при отправке почты по SMTP Gmail через порт 587 - PullRequest
0 голосов
/ 03 мая 2018

Попытка написать программу API Java, но получаю следующую ошибку:

Could not connect to SMTP host: smtp.gmail.com, port: 587;
nested exception is:
java.net.ConnectException: Operation timed out

Вот код Java, который я написал:

String HOST = "smtp.gmail.com";
String PORT = "587";
String USERNAME = "myname@gmail.com";
String PASSWORD = "myPassword";

Properties properties = System.getProperties();
    properties.put("mail.smtp.host", HOST);
    properties.put("mail.smtp.port", PORT);
    properties.put("mail.smtp.user", USERNAME);
    properties.put("mail.smtp.password", PASSWORD);


    Session session = Session.getDefaultInstance(properties);


    // 2) compose message
    try {
        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress(request.getSenderEmailId()));

        InternetAddress[] addressTo = new InternetAddress[request.getRecipients().size()];
        for (int i = 0; i < request.getRecipients().size(); i++) {
            addressTo[i] = new InternetAddress(request.getRecipients().get(i));
        }
        message.addRecipients(Message.RecipientType.TO, addressTo);

        // 3) create MimeBodyPart object and set your message text
        BodyPart messageBodyPart1 = new MimeBodyPart();

        // 4) create new MimeBodyPart object and set DataHandler object to
        // this object
        Multipart multipart = new MimeMultipart();

        messageBodyPart1.setContent(request.getContent(),
                EmailConstants.TYPE_HTML);
        message.setSubject(request.getSubject());
        multipart.addBodyPart(messageBodyPart1);
        // 6) set the multiplart object to the message object
        message.setContent(multipart);

        // 7) send message
        Transport.send(message);

    } catch (MessagingException ex) {
        ex.printStackTrace();
    }

Теперь я перепробовал все варианты, которые смог найти здесь, в StackOverflow, но ничего не помогло. Пробовал MkYong.com Java Mail Пример , но та же ошибка.

Также изменил PORT на 465 и добавил эти операторы в свойствах, но все еще та же проблема.

properties.put("mail.smtp.socketFactory.port", PORT);
properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

Интересно, я использую тот же код для отправки электронных писем с моего corp-account, и он работает просто отлично. Только что предоставил имя хоста corp и порт как 25, и он работает.

Я пытаюсь развернуть это в AWS, где учетная запись corp не работает, поэтому необходимо выполнить миграцию в Gmail.

Я использую Java 8 и Mail API:

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4</version>
</dependency>

Я пытаюсь пинговать на smtp.gmail.com, который подключается, но когда я делаю telnet smtp.gmail.com 587, он продолжает пытаться, но не подключается.

Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 18 декабря 2018

у меня работает:

public class AppConfig {
        @Bean
        public JavaMailSender getJavaMailSender() {
            log.info("Init mail sender bean");
            JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
            mailSender.setHost("smtp.gmail.com");
            mailSender.setPort(587);
            mailSender.setUsername("Username");
            mailSender.setPassword("Password");

            Properties props = mailSender.getJavaMailProperties();
            props.put("mail.transport.protocol", "smtp");
            props.put("mail.smtp.auth", "true");
            props.put("mail.smtp.starttls.enable", "true");
            props.put("mail.debug", "true");
            return mailSender;
        }
}
public class EmailSender {
..
      @Autowired
      public JavaMailSender emailSender;

      public void send(String from, String to, String subject, String body, boolean html) {
        try {
            MimeMessage message = createMimeMessage(subject);
            getMimeMessageHelper(from, to, subject, body, html, message, false);
            emailSender.send(message);
        } catch (Exception ex) {
        }
    }
...