部署在GoDaddy共享主机的ASP.NET应用使用AWS SES发信失败如何排查
故障原因与解决方案
根因定位
- 非代码逻辑问题:本地开发环境发信正常已经验证了发信逻辑的正确性,代码仅存在1处配置瑕疵,不是本次故障的核心诱因。
- 与MX记录无关:MX记录仅用于邮件服务接收邮件时的域名解析,你通过SES SMTP发信的过程完全不涉及MX记录,无需调整相关配置。
- 核心诱因是GoDaddy共享主机的出站限制:GoDaddy共享主机为了防范垃圾邮件发送,默认会封禁所有指向外部SMTP服务的25、465、587标准SMTP端口出站请求,仅允许连接GoDaddy自有SMTP服务器,你的SES连接请求被主机端防火墙直接拦截,就会返回
net_io_connectionclosed的传输连接关闭报错。 - 代码潜在瑕疵:你当前代码中先设置了
client.UseDefaultCredentials = true;,再手动赋值Credentials的逻辑是无效的,UseDefaultCredentials设为true时会强制使用当前IIS进程的系统凭据,覆盖你手动配置的SES SMTP账号密码,本地能跑属于环境巧合,部署到服务器后需要修正。
解决步骤
- 第一步先修正代码配置瑕疵:
将原代码中的
调整为client.UseDefaultCredentials = true; client.Credentials = credentials;
确保手动配置的SES SMTP凭据可以正常生效。client.UseDefaultCredentials = false; client.Credentials = credentials; - 第二步解决共享主机端口封禁问题,优先选择以下方案:
- 方案1(最稳定):改用AWS SES HTTP API发信:安装AWS SDK for .NET,调用SES的SendEmail接口发信,通过443 HTTPS端口传输,GoDaddy不会封禁常规HTTPS出站请求,可以完全绕开SMTP端口限制。
- 方案2(测试成本低):将SES SMTP端口改为SES支持的非标准端口2587或者2465,更新站点配置中的
EmailPort值后测试发信,部分GoDaddy共享主机未封禁这两个替代SMTP端口。 - 方案3:如果上述方案均不可用,可以联系GoDaddy客服申请开通对应SES区域SMTP服务器的出站SMTP端口访问权限,但共享主机服务通常不会同意这类申请,不做优先推荐。
内容的提问来源于stack exchange,提问作者user3060430
相关产品推荐
相关产品推荐

