如何解决 Amazon SES 的 SMTP 连接或超时问题?
上次更新日期:2021 年 11 月 10 日
我的 Amazon Simple Email Service(Amazon SES)简单邮件传输协议(SMTP)超时。如何解决 Amazon SES 的 SMTP 连接或超时错误?
解决方法
超时连接通常说明您的客户端无法建立到公有 Amazon SES 终端节点的 TCP 连接。要解决 Amazon SES 的 SMTP 连接或超时错误,首先要排查应用程序的 TCP 连接问题。如果 TCP 连接成功,则排查 SSL/TLS 协商问题。
重要提示:Amazon Elastic Compute Cloud (Amazon EC2) 默认会为所有 EC2 实例限制端口 25 上的 Amazon Virtual Private Cloud (Amazon VPC) 出口流量。如果您的应用程序需要 SMTP 端口 25 上的流量,您可以请求取消此限制。
排查应用程序的 TCP 连接问题
1. 运行以下 telnet 或 netcat (nc) 命令,将 email-smtp.us-east-1.amazonaws.com 替换为您正在使用的 Amazon SES SMTP 终端节点 :
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
注意:如果连接成功,请继续下面的排查 SSL/TLS 协商问题部分。
如果连接超时,则 telnet 命令将返回类似以下内容的输出:
Trying 18.232.32.150...
telnet: connect to address 18.232.32.150: Connection timed out
注意:如果连接超时,请继续下一步。
3. 确认您的本地防火墙规则、路由和访问控制列表 (ACL) 允许您使用的 SMTP 端口上的流量。此外,还要确认发送邮件的应用程序可以访问互联网。
例如,如果您使用 Amazon EC2 实例发送电子邮件并且连接到 SMTP 终端节点,则要验证以下项目:
- 安全组出站(出口)规则必须允许流量通过 TCP 端口 25、587 或 465 到达 SMTP 服务器。
- 网络 ACL 出站(出口)规则必须允许流量通过 TCP 端口 25、587 或 465 到达 SMTP 服务器。
- 网络 ACL 入站(入口)规则必须允许通过 TCP 端口 1024-65535、源自 SMTP 服务器的流量。
- EC2 实例必须具有互联网连接。
排查 SSL/TLS 协商问题
如果在排查 TCP 连接问题后,您仍遇到连接或超时问题,则检查 SSL/TLS 是否有问题。
1. 在 Amazon EC2 Linux 实例中,运行 openssl 命令,将 email-smtp.us-east-1.amazonaws.com 替换为您正在使用的 Amazon SES SMTP 终端节点:
注意:对于 Amazon EC2 Windows 实例,请参阅使用命令行测试与 Amazon SES SMTP 接口的连接,然后选择 PowerShell 选项卡。
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) 的位置,您在运行这些命令时可能会遇到问题。安装 openssl 时,请务必确定默认 CA 捆绑文件的位置。
2. 记下输出。预期应答值为 SMTP 220 和 SMTP 250。
3. 如果您未获得预期的输出,则检查以下项目:
- 验证 SSL/TLS 证书存储已正确配置。
- 确认发送邮件的应用程序拥有正确的证书路径。
- 验证 Amazon SES 证书已安装到您的服务器上。
注意:您可以测试是否安装了正确的证书。有关说明,请参阅关于 Amazon Trust Services 迁移中的关于证书部分。