Не удалось подключиться к узлу SMTP: email-smtp.us-east-1.amazonaws.com, порт: 465, ответ: -1

Я пытаюсь отправить электронную почту с помощью SAS/SMTP Amazon, и я получаю следующую ошибку:

javax.mail.MessagingException: не удалось подключиться к узлу SMTP: email-smtp.us-east-1.amazonaws.com, порт: 465, ответ: -1

Вот как я пытаюсь отправить почту:

Spring Конфигурация почтового отправителя:

<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

Ответы

Ответ 1

С асинхронным 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> 

как было указано dave.

EDIT: воспользуйтесь этим решением: fooobar.com/questions/371440/...

Ответ 2

Amazon SES SMTP требует SSL до сеанса SMTP. Команда StartTLS не поддерживается SES.

Ответ 3

Эти настройки работали для меня:

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 отказывается пересылать письмо.

Ответ 4

Этот сотрудник из AWS заявляет, что SES вообще не поддерживает SSL. https://forums.aws.amazon.com/message.jspa?messageID=218303.

Amazon SES попытается отправить электронное письмо с включенной защитой транспортного уровня, но нет способа гарантировать отправку сообщений с помощью TLS. SES использует оппортунистический TLS при отправке писем, что означает, что он попытается сначала отправить электронные сообщения по TLS, а затем вернется к обычным SMTP, если TLS недоступен.

Следовательно, я думаю, что проблема, которую вы видите, не связана с TLS или SSL, а что-то еще.

Ответ 5

Обратите внимание, что примечание AWS в https://forums.aws.amazon.com/message.jspa?messageID=218303 относится к шифрованию связи между сервером для поддержания конфиденциальности сообщения электронной почты, является общая характеристика всех SMTP-сервисов.

Этот вопрос связан с использованием безопасного подключения к серверу AWS SMTP для защиты паролей, используемых для аутентификации с сервером AWS.

Ответ 6

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, пожалуйста, config:

props.setProperty("mail.smtp.starttls.enable", "true");

Или вы можете скачать AWS Java SDK из ЗДЕСЬ.

Пример кода ЗДЕСЬ