如何解决 Amazon SES 的 SMTP 连接或超时问题?

2 分钟阅读
0

我的 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) 或 Test-NetConnection 命令。将 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

-或者-

在 PowerShell 中,运行以下命令以连接到 Amazon SES SMTP 服务器:

Test-NetConnection -Port 587 -ComputerName email-smtp.us-west-2.amazonaws.com

2.    记下输出。如果连接成功,请进入排查 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

此 PowerShell 命令会返回类似以下内容的输出:

ComputerName     : email-smtp.us-west-2.amazonaws.com
RemoteAddress    : 198.51.100.126
RemotePort       : 587
InterfaceAlias   : Ethernet
SourceAddress    : 203.0.113.46
TcpTestSucceeded : True

连接不成功(超时)

此 telnet 命令会返回类似以下内容的输出:

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

此 PowerShell 命令会返回类似以下内容的输出:

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

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

例如,如果您使用 EC2 实例发送电子邮件并且连接到 SMTP 端点,则要验证以下项目:

排查 SSL/TLS 协商问题

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

1.    在 EC2 Linux 实例中,运行 openssl 命令。对于 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

**注意:**将 email-smtp.us-east-1.amazonaws.com 替换为您正在使用的 Amazon SES SMTP 端点。在运行上述命令时,修改默认证书颁发机构 (CA) 的位置可能会导致问题。安装 OpenSSL 时,请务必确定默认 CA 捆绑文件的位置。

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

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

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

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


相关信息

使用 Amazon SES SMTP 接口发送电子邮件

相关视频

AWS 官方
AWS 官方已更新 2 年前