Не удалось подключиться к узлу SMTP: email-smtp.us-east-1.amazonaws.com, порт: 465, ответ: -1
Я пытаюсь отправить электронное письмо с помощью SES/SMTP от Amazon и получаю следующую ошибку:
javax.mail.MessagingException: не удалось подключиться к узлу SMTP: email-smtp.us-east-1.amazonaws.com, порт: 465, ответ: -1
Вот как я пытаюсь отправить почту:
Конфигурация отправителя весенней почты:
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="${mail.server}"/>
<property name="port" value="${mail.port}"/>
<property name="username" value="${aws.mail.smtp.user}"/>
<property name="password" value="${aws.mail.smtp.password}"/>
<property name="javaMailProperties">
<props>
<!-- Use SMTP-AUTH to authenticate to SMTP server -->
<prop key="mail.smtp.auth">true</prop>
<!-- Use TLS to encrypt communication with SMTP server -->
<prop key="mail.smtp.starttls.enable">true</prop>
</props>
</property>
</bean>
с:
mail.server =email-smtp.us-east-1.amazonaws.com
mail.port = 465
6 ответов
Для Amazon SES конфигурация должна быть следующей:
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.ssl.enable">true</prop>
вместо:
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.starttls.enable">true</prop>
как намекнул Дэйв.
РЕДАКТИРОВАТЬ: Пожалуйста, используйте это решение: /questions/35344735/kak-nastroit-spring-javamailsender-dlya-ses-s-ispolzovaniem-smtp/35344760#35344760
Amazon SES SMTP требует SSL перед сеансом SMTP. Команда StartTLS не поддерживается SES.
У меня была такая же проблема с портом 25, но для меня она работала с портом 587.
Эти настройки работали для меня:
mail.transport.protocol=smtp mail.smtp.port=25 mail.smtp.auth=true mail.smtp.starttls.enable=true mail.smtp.starttls.required=true mail.smtp.host=email-smtp.us-east-1.amazonaws.com mail.smtp.user=[SMTP username] mail.smtp.password=[SMTP user password]
Если вы попытаетесь соединиться, используя соединение SSL, оно отклонит соединение. Так что вам нужно сделать STARTTLS после подключения.
Вы можете добавить mail.debug=true, чтобы увидеть, где это не удалось.
Адрес электронной почты отправителя должен быть подтвержденным адресом электронной почты, в противном случае SES отказывается переслать письмо.
Этот сотрудник из AWS заявляет, что SES вообще не поддерживает SSL. https://forums.aws.amazon.com/message.jspa?messageID=218303.
Amazon SES будет пытаться отправлять электронную почту с включенной защитой транспортного уровня, но нет способа гарантировать, что сообщения будут отправляться с помощью TLS. SES использует оппортунистический TLS при отправке электронной почты, что означает, что он сначала попытается отправить электронную почту по TLS, а затем вернется к обычному SMTP, если TLS будет недоступен.
Следовательно, я думаю, что проблема, с которой вы сталкиваетесь, связана не с TLS или SSL, а с чем-то другим.
Обратите внимание, что примечание AWS по адресу https://forums.aws.amazon.com/message.jspa?messageID=218303 относится к шифрованию обмена данными между серверами для обеспечения конфиденциальности сообщения электронной почты и является общей характеристикой всех служб SMTP.,
Этот вопрос касается использования безопасного соединения с SMTP-сервером AWS для защиты паролей, используемых для аутентификации на сервере AWS.
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.host", "email-smtp.us-east-1.amazonaws.com");
props.setProperty("mail.user", "your_ses_user");
props.setProperty("mail.password", "your_ses_pwd");
Session mailSession = Session.getDefaultInstance(props, new Authenticator(){
public PasswordAuthentication getPasswordAuthentication() {
String username = "your_ses_user";
String password = "your_ses_pwd";
return new PasswordAuthentication(username, password);
}
});
Этот код был протестирован, отлично работает. Если вы хотите использовать SMTP через SSL, пожалуйста, настройте:
props.setProperty("mail.smtp.starttls.enable", "true");
Или вы можете скачать AWS Java SDK ЗДЕСЬ.
Пример кода ЗДЕСЬ