.Net SmtpClient调用Amazon SES发邮件超时问题排查求助
针对Amazon SES SMTP超时及TLS问题的抓包分析建议
一、定位TLS握手阶段的异常点
在Wireshark中过滤目标SES服务器流量(过滤规则:ip.addr == email-smtp.us-east-1.amazonaws.com),重点排查TCP连接建立和TLS握手两个阶段:
- 正常流程:TCP三次握手(SYN→SYN-ACK→ACK)完成后,客户端发送
STARTTLS命令,随后触发完整TLS握手流程(Client Hello→Server Hello→Certificate→Server Key Exchange→Server Hello Done→Client Key Exchange→Change Cipher Spec→Finished→Server Change Cipher Spec→Server Finished) - 异常PC的抓包若卡在以下环节,对应排查方向:
- TCP三次握手阶段:检查本地防火墙/企业内网策略是否拦截587端口出站流量,或本地路由配置异常
STARTTLS发送后无响应:服务器未接收命令,或本地TLS套件不被SES支持- TLS Client Hello发出后无Server Hello:对比正常PC抓包的TLS版本和加密套件列表,异常PC可能使用了SES已弃用的旧版本(如TLS 1.0/1.1,SES仅支持TLS 1.2+)或不兼容的加密套件
二、结合openssl命令的失败细节分析
给openssl命令添加-debug参数,获取更详细的失败阶段信息:
openssl s_client -crlf -starttls smtp -connect email-smtp.us-east-1.amazonaws.com:587 -debug
- 若输出卡在
connect:errno=xxx:属于TCP层面连接问题,优先排查防火墙、网络路由或DNS解析 - 若卡在
STARTTLS之后无响应:尝试指定SES支持的TLS版本和加密套件测试,比如:
若该命令能成功,说明异常PC默认TLS配置不符合SES要求openssl s_client -crlf -starttls smtp -connect email-smtp.us-east-1.amazonaws.com:587 -tls1_2 -cipher ECDHE-RSA-AES128-GCM-SHA256
三、检查.Net SmtpClient的TLS配置
.Net平台的SmtpClient行为受系统或代码配置影响:
- 代码中必须显式设置
EnableSsl = true - 对于.NET Framework:检查系统注册表是否禁用TLS 1.2,需确保
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319下的SchUseStrongCrypto值设为1 - 对于.NET Core/.NET 5+:可通过代码强制指定TLS版本,避免系统默认配置问题:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13;
四、排除网络环境差异
仅部分PC出现问题,大概率是网络环境差异导致:
- 检查异常PC是否处于企业内网,是否有代理服务器、防火墙规则拦截SMTP over TLS流量
- 对比正常PC和异常PC的DNS解析结果,确认是否解析到SES官方指定的服务器IP范围
内容的提问来源于stack exchange,提问作者Maxime Dupont
相关产品推荐
相关产品推荐

