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

643   5  

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" />, иначе свойства javamail не будут приняты во внимание.

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

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

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

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

To

<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>

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

<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>

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

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

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]

Comments

    Ничего не найдено.