15

我们正在尝试将 Spring JavaMailSender 配置为使用 SMTP 与 Amazon 的 SES 服务一起使用,但我们收到此错误:

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没有任何运气。

4

5 回答 5

40

基于@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。

于 2012-01-19T15:20:23.480 回答
14

我刚刚遇到了同样的问题。实际上,我几周前试图解决它并被卡住了......

我做的第一件事是确定问题:激活邮件 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>
于 2012-01-19T08:44:11.013 回答
4

这个问题很老了,但如果有人需要 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
于 2017-04-02T02:30:40.480 回答
2

这段代码对我有用:

<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>
于 2013-03-21T11:19:10.897 回答
1

如果你想使用@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;
}
于 2015-04-30T12:58:46.160 回答