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

无法连接到SMTP主机:email-SMTP.us-east-1.amazonaws.com,端口:465,响应:-1,smtp,amazon-web-services,ssl,amazon-ses,Smtp,Amazon Web Services,Ssl,Amazon Ses,我正在尝试使用Amazon的SES/SMTP发送电子邮件,但收到以下错误: javax.mail.MessagineException:无法连接到SMTP主机:email-SMTP.us-east-1.amazonaws.com,端口:465,响应:-1 以下是我尝试发送邮件的方式: Spring邮件发件人配置: <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">

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

javax.mail.MessagineException:无法连接到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>

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

对于amazon SES,需要进行如下配置:

<prop key="mail.smtp.auth">true</prop>    
<prop key="mail.smtp.ssl.enable">true</prop>
true
真的
而不是:

<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.starttls.enable">true</prop> 
true
真的
正如戴夫暗示的那样


编辑:请使用此解决方案:

此AWS员工声明SES根本不支持SSL。

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

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

请注意,AWS注释是指加密服务器到服务器通信以保持电子邮件的机密性,是所有SMTP服务的共同特征

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

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


代码示例是

这些设置对我有效:

如果您尝试使用SSL连接进行连接,它将拒绝该连接。所以你需要在连接后进行STARTTLS

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


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

我对端口25也有同样的问题,但对我来说,它对端口587有效

谢谢Dave,我还尝试将mail.smtp.starttls.enable设置为false,但没有效果。你还有什么别的想法吗?我不明白这个概念。“SMTP会话之前需要SSL”是什么意思?你能举一些java代码的例子吗?显然情况已经不是这样了——我必须启用SSL才能让我的Railo服务器再次运行电子邮件。我认为这个答案中的代码片段不正确(例如,应该是“mail.smtps.auth”),但是链接中的信息很好,可以帮助您找到答案。我缺少mail.smtp.starttls.required
props.setProperty("mail.smtp.starttls.enable", "true");
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]