Как настроить Spring JavaMailSender для SES с использованием SMTP? - PullRequest
15 голосов
/ 19 января 2012

Мы пытаемся настроить 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 ]

37 голосов
/ 19 января 2012

На основании ответа @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 не будут приняты во внимание.

14 голосов
/ 19 января 2012

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

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

Этот вопрос довольно старый, но в случае, если кому-то нужна конфигурация загрузки 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
2 голосов
/ 21 марта 2013

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

<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>
1 голос
/ 30 апреля 2015

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