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

Posted

技术标签:

【中文标题】无法连接到 SMTP 主机:email-smtp.us-east-1.amazonaws.com,端口:465,响应:-1【英文标题】:Could not connect to SMTP host: email-smtp.us-east-1.amazonaws.com, port: 465, response: -1 【发布时间】:2012-01-25 11:17:33 【问题描述】:

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

javax.mail.MessagingException: em>

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

使用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://***.com/a/8928559/536299

【讨论】:

我不认为这个答案中的代码 sn-ps 是正确的(例如应该是“mail.smtps.auth”),但是链接中的信息很好,可以帮助你答案。【参考方案3】:

这些设置对我有用:

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 将拒绝转发电子邮件。

【讨论】:

我错过了 mail.smtp.starttls.required【参考方案4】:

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

【讨论】:

谢谢戴夫,我也尝试将 mail.smtp.starttls.enable 设置为 false 无济于事。你还有什么想法吗? 我不明白之前的概念。 “在 SMTP 会话之前需要 SSL”是什么意思?可以举一些java代码示例吗?【参考方案5】:
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");

或者您可以从HERE 下载 AWS Java SDK。

代码示例是HERE

【讨论】:

【参考方案6】:

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

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

【讨论】:

【参考方案7】:

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

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

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

【讨论】:

显然不再是这种情况了——我必须启用 SSL 才能让电子邮件再次与我的 Railo 服务器一起工作。

以上是关于无法连接到 SMTP 主机:email-smtp.us-east-1.amazonaws.com,端口:465,响应:-1的主要内容,如果未能解决你的问题,请参考以下文章

PHPMailer无法连接到SMTP主机

无法连接到 SMTP 主机:smtp.gmail.com,端口:465,响应:-1

Spring Boot - 无法连接到 SMTP 主机:smtp.gmail.com,端口:25,响应:421

MailConnectException:无法连接到主机,端口:smtp.gmail.com,465;超时-1

SMTP 错误:无法连接到服务器:php_network_getaddresses:getaddrinfo 失败:不知道这样的主机 | PHP 邮件程序 6.5

在 Airflow 上,连接到 SMTP 主机时连接被拒绝