如何对 Amazon SES 的 SMTP 连接或超时问题进行故障排除?
我的 Amazon Simple Email Service (Amazon SES) 简单邮件传输协议 (SMTP) 超时。
简短描述
当您的客户端无法与公共 Amazon SES 端点建立 TCP 连接时,您就会遇到连接超时问题。要解决 Amazon SES 的 SMTP 连接或超时错误,请先对应用程序的 TCP 连接问题进行故障排除。如果 TCP 连接成功,请对 SSL/TLS 协商问题进行故障排除。
默认情况下,Amazon Elastic Compute Cloud (Amazon EC2) 会为所有 Amazon EC2 实例限制端口 25 上的 Amazon Virtual Private Cloud (Amazon VPC) 出口流量。对于流量需要通过 SMTP 端口 25 的应用程序,您可以请求取消此限制。或者,在端口 587 (STARTTLS) 和端口 465(TLS 包装器)上使用 SMTP 连接,因为这两个端口的默认限制与端口 25 不同。
解决方法
对应用程序的 TCP 连接问题进行故障排除
完成以下步骤:
-
然后,运行以下 telnet 命令:
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**注意:**请将 email-smtp.us-east-1.amazonaws.com 替换为您正在使用的 Amazon SES SMTP endpoint(Amazon SES SMTP 端点)。
-或-运行以下 netcat (nc) 命令:
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-或-
在 Windows PowerShell 中,运行以下命令即可连接到 Amazon SES SMTP 服务器:
Test-NetConnection -Port 587 --ComputerName email-smtp.us-west-2.amazonaws.com -
记下输出。如果连接成功,则转到对 SSL/TLS 协商问题进行故障排除部分。如果连接不成功,则继续执行步骤 3。如果连接成功,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如果连接成功,Test-NetConnection 命令将返回类似于以下内容的输出:
ComputerName : email-smtp.us-west-2.amazonaws.com RemoteAddress : 198.51.100.126 RemotePort : 587 InterfaceAlias : Ethernet SourceAddress : 203.0.113.46 TcpTestSucceeded : True如果连接超时,Test-NetConnection 命令将返回类似于以下内容的输出:
WARNING: Ping to 52.39.11.136 failed with status: TimedOut ComputerName : email-smtp.us-west-2.amazonaws.com RemoteAddress : 35.155.47.104 RemotePort : 587 InterfaceAlias : Ethernet 2 SourceAddress : 10.0.0.140 PingSucceeded : False PingReplyDetails (RTT) : 0 ms TcpTestSucceeded : False -
如果连接失败,请确认您的本地防火墙规则、路由和网络访问控制列表(网络 ACL)允许流量通过您正在使用的 SMTP 端口。另外,请确认您的发送应用程序可以访问互联网。
例如,如果您使用 EC2 实例发送电子邮件并连接到 SMTP 端点,请验证以下内容:
- 安全组出站规则允许流量通过 TCP 端口 25、587 或 465 到达 SMTP 服务器。
- 网络 ACL 出站规则允许流量通过 TCP 端口 25、587 或 465 到达 SMTP 服务器。
- 网络 ACL 入站规则允许来自 SMTP 服务器的流量通过 TCP 端口 1024-65535。
- 实例具有互联网连接。
对 SSL/TLS 协商问题进行故障排除
如果 TCP 连接成功但仍遇到连接或超时问题,请完成以下步骤以检查 SSL/TLS 是否存在问题:
-
连接到 Amazon SES SMTP 服务器。
对于 EC2 Linux 实例,运行以下命令:openssl s_client -crlf -connect email-smtp.us-east-1.amazonaws.com:465**注意:**请将 email-smtp.us-east-1.amazonaws.com 替换为您正在使用的 Amazon SES SMTP endpoint(Amazon SES SMTP 端点)。
对于 EC2 Windows 实例,请参阅 Testing your connection to the Amazon SES SMTP interface using the command line(使用命令行来测试与 Amazon SES SMTP 接口的连接情况)中的 PowerShell 选项卡。 -
要检查 SSL 问题,请运行以下命令:
openssl s_client -crlf -quiet -connect email-smtp.us-west-2.amazonaws.com:465如果连接成功,您会收到类似于以下内容的 SMTP 220 响应:
depth=2 C = US, O = Amazon, CN = Amazon Root CA 1 verify return:1 depth=1 C = US, O = Amazon, OU = Server CA 1B, CN = Amazon verify return:1 depth=0 CN = email-smtp.us-west-2.amazonaws.com verify return:1 220 email-smtp.amazonaws.com ESMTP SimpleEmailService-d-VCSHDP1YZ A1b2C3d4E5f6G7h8I9j0 -
要检查 TLS 问题,请运行以下命令:
openssl s_client -crlf -quiet -starttls smtp -connect email-smtp.us-west-2.amazonaws.com:587如果连接成功,您会收到类似于以下内容的 SMTP 250 响应:
depth=2 C = US, O = Amazon, CN = Amazon Root CA 1 verify return:1 depth=1 C = US, O = Amazon, OU = Server CA 1B, CN = Amazon verify return:1 depth=0 CN = email-smtp.us-west-2.amazonaws.com verify return:1 250 Ok -
如果没有收到 SMTP 220 响应 (SSL) 或 SMTP 250 响应 (TLS),请验证以下内容:
您正确配置了 SSL/TLS 证书存储。
您的发送应用程序具有正确的证书路径。
您在服务器上安装了 Amazon SES 证书。
**注意:**要验证您是否安装了正确的证书,请参阅 About the Amazon Trust Services migration(关于 Amazon Trust Services 迁移)中的 About the certificates(关于证书)部分。
相关信息
Using the Amazon SES SMTP interface to send email(使用 Amazon SES SMTP 接口发送电子邮件)
相关内容
AWS 官方已更新 9 个月前
