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

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

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

person balteo    schedule 21.12.2011    source источник


Ответы (7)


Для 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> 

как намекнул Дэйв.

ИЗМЕНИТЬ: используйте это решение: https://stackoverflow.com/a/8928559/536299

person balteo    schedule 24.12.2011
comment
Я не думаю, что фрагменты кода в этом ответе верны (например, должно быть mail.smtps.auth), но информация в ссылке верна и поможет вам найти ответ. - person fivedogit; 27.09.2016

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

person dave wanta    schedule 22.12.2011
comment
Спасибо, Дэйв, я также попытался установить для mail.smtp.starttls.enable значение false, но безрезультатно. Есть ли у вас другие идеи? - person balteo; 23.12.2011
comment
Я не понимаю концепции «до». Что требует SSL перед сеансом SMTP? Вы можете привести пример кода Java? - person Shashi Ranjan; 02.05.2018

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

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

person sudhir shakya    schedule 09.02.2014
comment
Мне не хватало mail.smtp.starttls.required - person Derick Daniel; 15.01.2021

У меня была такая же проблема с портом 25, но для меня она работала с портом 587.

person Keerthi Dodampahala    schedule 13.09.2019

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

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

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

person npellow    schedule 25.01.2012
comment
Очевидно, это уже не так - мне пришлось включить SSL, чтобы электронная почта снова работала с моим сервером Railo. - person Jeromy French; 24.02.2016

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

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

person chrisdornan    schedule 16.02.2012

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 со страницы ЗДЕСЬ.

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

person anson    schedule 18.02.2013