13

我正在尝试使用 Amazon 的 SES/SMTP 发送电子邮件,但出现以下错误:

javax.mail.MessagingException:无法连接到 SMTP 主机:email-smtp.us-east-1.amazonaws.com,端口:465,响应:-1

这是我尝试发送邮件的方式:

Spring邮件发件人配置:

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="host" value="${mail.server}"/>
        <property name="port" value="${mail.port}"/>
        <property name="username" value="${aws.mail.smtp.user}"/>
        <property name="password" value="${aws.mail.smtp.password}"/>
        <property name="javaMailProperties">
            <props>
            <!-- Use SMTP-AUTH to authenticate to SMTP server -->
            <prop key="mail.smtp.auth">true</prop>
            <!-- Use TLS to encrypt communication with SMTP server -->
            <prop key="mail.smtp.starttls.enable">true</prop>  
            </props>    
        </property>
    </bean>

和:

mail.server =email-smtp.us-east-1.amazonaws.com
mail.port = 465
4

7 回答 7

15

使用 amazon SES,配置需要如下:

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

代替:

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

正如戴夫所暗示的那样。

编辑:请使用此解决方案:https ://stackoverflow.com/a/8928559/536299

于 2011-12-24T07:29:21.593 回答
4

Amazon SES SMTP 在 SMTP 会话之前需要 SSL。SES 不支持 StartTLS 命令。

于 2011-12-22T15:13:46.353 回答
2

这些设置对我有用:

mail.transport.protocol=smtp
mail.smtp.port=25
mail.smtp.auth=true
mail.smtp.starttls.enable=true
mail.smtp.starttls.required=true
mail.smtp.host=email-smtp.us-east-1.amazonaws.com
mail.smtp.user=[SMTP username]
mail.smtp.password=[SMTP user password]

如果您尝试使用 SSL 连接进行连接,则会拒绝该连接。所以连接后需要做STARTTLS。

您可以添加 mail.debug=true 以查看失败的位置。

发件人电子邮件地址必须是经过验证的电子邮件地址,否则 SES 将拒绝转发电子邮件。

于 2014-02-09T00:34:18.397 回答
2

我在端口 25 上遇到了同样的问题,但对我来说,它在端口 587 上工作。

于 2019-09-13T17:07:36.797 回答
0

这位来自 AWS 的员工表示,SES 根本不支持 SSL。 https://forums.aws.amazon.com/message.jspa?messageID=218303

Amazon SES 将尝试在启用传输层安全的情况下发送电子邮件,但无法保证使用 TLS 发送邮件。SES 在发送电子邮件时使用机会 TLS,这意味着它将首先尝试通过 TLS 发送电子邮件,然后如果 TLS 不可用,将回退到常规 SMTP。

因此,我认为您看到的问题与 TLS 或 SSL 无关,而是其他问题。

于 2012-01-25T03:30:46.880 回答
0

请注意,https: //forums.aws.amazon.com/message.jspa?messageID=218303 上的 AWS 说明是指加密服务器到服务器的通信以保持电子邮件消息的机密性,这是所有 SMTP 服务的共同特征.

此问题涉及使用与 AWS SMTP 服务器的安全连接来保护用于向 AWS 服务器进行身份验证的密码。

于 2012-02-16T15:43:20.403 回答
0
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.host", "email-smtp.us-east-1.amazonaws.com");
props.setProperty("mail.user", "your_ses_user");
props.setProperty("mail.password", "your_ses_pwd");



Session mailSession = Session.getDefaultInstance(props, new Authenticator(){
    public PasswordAuthentication getPasswordAuthentication() {
        String username = "your_ses_user";
        String password = "your_ses_pwd";
        return new PasswordAuthentication(username, password);
    }
});

这些代码已经过测试,运行良好。如果您想通过 SSL 使用 SMTP,请配置:

props.setProperty("mail.smtp.starttls.enable", "true");

或者,您可以从这里下载 AWS Java SDK 。

代码示例在这里

于 2013-02-18T06:23:30.720 回答