如何排查 Amazon SES 的 SMTP 连接或超时问题?

上次更新时间:2020 年 4 月 23 日

我的 Amazon Simple Email Service (Amazon SES) 简单邮件传输协议 (SMTP) 出现超时。该如何解决 Amazon SES 的 SMTP 连接或超时错误? 

简短描述

超时连接通常说明您的客户端无法建立到公有 Amazon SES 终端节点的 TCP 连接。要解决 Amazon SES 的 SMTP 连接或超时错误,请检查以下各项:

1.    排查应用程序的 TCP 连接问题。

2.    如果 TCP 连接成功,则排查 SSL/TLS 协商问题。

重要提示:Amazon Elastic Compute Cloud (Amazon EC2) 默认会为所有 EC2 实例限制端口 25 上的 Amazon Virtual Private Cloud (Amazon VPC) 出口流量。如果您的应用程序需要 SMTP 端口 25 上的流量,您可以请求取消此限制

解决方法

排查应用程序的 TCP 连接问题

1.    运行与以下类似的 telnet 或 netcat (nc) 命令:

注意:务必将区域终端节点替换为您使用的 Amazon SES 终端节点

telnet email-smtp.us-east-1.amazonaws.com 587
telnet email-smtp.us-east-1.amazonaws.com 25
telnet email-smtp.us-east-1.amazonaws.com 465
nc -vz email-smtp.us-east-1.amazonaws.com 587
nc -vz email-smtp.us-east-1.amazonaws.com 25
nc -vz email-smtp.us-east-1.amazonaws.com 465

2.    记下输出。例如,如果连接成功,则 telnet 命令将返回与以下类似的输出:

Trying 35.170.126.22...
Connected to email-smtp.us-east-1.amazonaws.com.
Escape character is '^]'.
220 email-smtp.amazonaws.com ESMTP SimpleEmailService-d-A12BCD3EF example0mJncW410pSau

如果连接超时,则 telnet 命令将返回与以下类似的输出:

Trying 18.232.32.150...
telnet: connect to address 18.232.32.150: Connection timed out

3.    如果连接超时,请确认您的本地防火墙规则、路由和访问控制列表 (ACL) 允许您使用的 SMTP 端口上的流量。此外,请确认发送邮件的应用程序可以访问互联网。

例如,如果您使用 Amazon EC2 实例发送电子邮件并且连接到 SMTP 终端节点,则检查以下项目:

排查 SSL/TLS 协商问题

如果在排查 TCP 连接后,您仍遇到连接或超时问题,则检查 SSL/TLS 是否有问题。

1.    从 Amazon EC2 Linux 实例运行与以下类似的 openssl 命令:

注意:务必将终端节点替换为您使用的 Amazon SES 终端节点

openssl s_client -crlf -connect email-smtp.us-east-1.amazonaws.com:465 
openssl s_client -crlf -starttls smtp -connect email-smtp.us-east-1.amazonaws.com:587

注意:如果默认证书颁发机构 (CA) 捆绑文件的位置已被修改,您在运行这些命令时可能会遇到问题。

2.    记下输出。预期应答值为 SMTP 220 和 SMTP 250。

3.    如果您未收到预期的输出,则检查以下项目:

  • 确认 SSL/TLS 证书存储已正确配置。
  • 确认发送邮件的应用程序拥有正确的证书路径。
  • 确认 Amazon SES 证书已安装到您的服务器上。

注意:有关测试是否安装了正确的证书的说明,请参阅关于 Amazon Trust Services 迁移中的关于证书部分。


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?