Как настроить 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 без везения.

Ответы

Ответ 1

На основе ответа @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 не учитываются.

Ответ 2

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

Первое, что я сделал, чтобы определить проблему: активировать режим отладки для почты 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>

Ответ 3

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

<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">[email protected]</prop>
        </props>
    </property>
</bean>

Ответ 4

Если вы хотите использовать @ 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;
}

Ответ 5

Этот вопрос довольно старый, но если кому-то нужна конфигурация загрузки 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: [email protected]