Как настроить Spring JavaMailSender для SES с использованием SMTP?

Мы пытаемся настроить Spring JavaMailSender для работы со службой Amazon SES с использованием SMTP, но мы получаем эту ошибку:

javax.mail.MessagingException: Could not connect to SMTP host: email-smtp.us-east-1.amazonaws.com, port: 465, response: -1

Это наша конфигурация:

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <property name="host" value="email-smtp.us-east-1.amazonaws.com" />
    <property name="port" value="465" />
    <property name="username" value="..." />
    <property name="password" value="..." />
    <property name="javaMailProperties">
        <props>
            <prop key="mail.smtp.auth">true</prop>
            <prop key="mail.smtp.ssl.enable">true</prop>
        </props>
    </property>
</bean>

Есть идеи, что может быть не так? Заранее спасибо.

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

5 ответов

Решение

На основании ответа @GuCo: Это полная конфигурация, которая работала для меня:

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <property name="host" value="email-smtp.us-east-1.amazonaws.com" />
    <property name="port" value="465" />
    <property name="protocol" value="smtps" />
    <property name="username" value="..." />
    <property name="password" value="..." />
    <property name="javaMailProperties">
        <props>
            <prop key="mail.smtps.auth">true</prop>
            <prop key="mail.smtp.ssl.enable">true</prop>
            <prop key="mail.transport.protocol">smtps</prop>
        </props>
    </property>
</bean>

Не забывайте <property name="protocol" value="smtps" /> Конфигурация, или же javaMailProperties не принимаются во внимание.

Я просто столкнулся с той же проблемой. На самом деле, я попытался решить это несколько недель назад и застрял...

Первое, что я сделал, чтобы определить проблему: активировать режим отладки для почтового API

<props>
    ...
    <prop key="mail.debug">true</prop> 
</props>

Это показало мне, что на самом деле он не использует SSL

DEBUG SMTP: trying to connect to host "email-smtp.us-east-1.amazonaws.com", port 465, isSSL false

Мой коллега указал, чтобы включить другое свойство почты, чтобы действительно использовать SSL

<props>
    ...
    <prop key="mail.transport.protocol">smtps</prop>
    ...
</props>

После добавления этого значения значение isSSL изменилось на true, но указало на другую ошибку. Он больше не использует аутентификацию из-за изменения протокола, который можно исправить, конечно, изменив свойство

<prop key="mail.smtp.auth">true</prop>

в

<prop key="mail.smtps.auth">true</prop>

После этого путешествия у меня наконец получилось:-)

Надеюсь, это было полезно...

Просто, чтобы суммировать правильные свойства:

<props>
    <prop key="mail.smtps.auth">true</prop>
    <prop key="mail.smtp.ssl.enable">true</prop>
    <prop key="mail.transport.protocol">smtps</prop>
</props>

Этот вопрос довольно старый, но в случае, если кому-то нужна конфигурация загрузки Spring, это то, что у меня сработало:

mail:
    host: email-smtp.us-west-2.amazonaws.com
    port: 465
    username: <username>
    password: <pwd>

    properties:
        mail.smtp.auth: true
        mail.smtp.starttls.enable: true
        mail.smtp.starttls.required: true
        mail.smtp.ssl.enable: true
        mail.transport.protocol: smtps
        mail.smtp.from: no-reply@yourdomain.com

Если вы хотите использовать @Bean, у меня сработало следующее:

@Bean
public MailSender mailSender() {
    JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
    mailSender.setHost("email-smtp.eu-west-1.amazonaws.com");
    mailSender.setUsername("...");
    mailSender.setPassword("...");
    mailSender.setPort(465);
    mailSender.setProtocol("smtps");

    // This can be very helpful
    Properties properties = new Properties();
    properties.setProperty("mail.debug", "true");
    mailSender.setJavaMailProperties(properties);

    return mailSender;
}

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

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <property name="host" value="email-smtp.us-east-1.amazonaws.com" />
            <!--Obtaining Your Amazon SES SMTP Credentials. use http://docs.aws.amazon.com/ses/latest/DeveloperGuide/smtp-credentials.html-->
    <property name="username" value="smtp user name" />
    <property name="password" value="smtp password" />
    <property name="javaMailProperties">
        <props>
            <prop key="mail.smtp.auth">true</prop>
            <prop key="mail.transport.protocol">smtp</prop>
            <prop key="mail.smtp.port">25</prop>
            <prop key="mail.smtp.starttls.enable">true</prop>
            <prop key="mail.smtp.starttls.required">true</prop>
            <prop key="mail.smtp.from">abc@example.com</prop>
        </props>
    </property>
</bean>
Другие вопросы по тегам