У меня есть функция отправки почты с помощью 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