无法通过GoDaddy SMTP发送邮件的ASP.NET MVC技术求助
解决ASP.NET MVC在IIS上使用GoDaddy SMTP发送邮件失败的问题
我得先点明核心问题:GoDaddy的SMTP中继服务对非GoDaddy托管的外部服务器(比如你自己搭建的IIS)有特殊限制,这就是你之前在GoDaddy虚拟主机上能用、换了IIS就失效的关键原因。结合你的代码和常见踩坑点,我整理了针对性的解决方案:
1. 先修正代码里的低级错误
你的代码里有两个容易被忽略的问题:
NetworkCredentials拼写错误,C#里正确的类名是NetworkCredential(单数形式)EnableSsl = False在C#里规范写法是小写的false(虽然编译器可能兼容,但严格来说是语法细节问题)
2. 调整GoDaddy SMTP配置参数
针对外部IIS环境,GoDaddy有专门的SMTP配置方案,别再用relay-hosting或dedrelay了,试试这套:
- SMTP服务器:
smtpout.secureserver.net(这是GoDaddy面向外部服务器的标准SMTP入口) - 端口:优先用
587(TLS加密),不行就换465(SSL加密)——绝对别用25端口,绝大多数ISP会封禁25端口防垃圾邮件 - SSL/TLS:必须启用(
EnableSsl = true) - 发件人限制:GoDaddy要求发件人地址必须和你用于认证的邮箱完全一致,不能随便用
model.From,得固定成support@{myCompanyName}.com
修正后的完整代码示例:
MailMessage msg = new MailMessage(); // 注意:发件人必须与认证邮箱完全匹配 msg.From = new MailAddress("support@{myCompanyName}.com"); msg.To.Add(model.To); msg.Body = model.Body; msg.Subject = model.Subject; using (SmtpClient smtp = new SmtpClient("smtpout.secureserver.net", 587)) { smtp.Credentials = new NetworkCredential("support@{myCompanyName}.com", "{password}"); smtp.EnableSsl = true; // 增加超时设置,避免因网络延迟导致失败 smtp.Timeout = 10000; smtp.Send(msg); }
3. 其他必须检查的关键点
- 邮箱权限验证:确保
support@{myCompanyName}.com是在GoDaddy正常创建的邮箱,密码没有过期或输入错误 - 防火墙/出站规则:检查IIS服务器的防火墙设置,允许出站访问587或465端口
- 错误日志排查:如果还是失败,一定要加异常捕获记录详细错误,比如:
try { smtp.Send(msg); } catch (Exception ex) { // 把ex.Message和ex.InnerException写入日志 // 这能帮你精准定位问题,比如认证失败、端口被封、邮件被拦截等 } - 避免垃圾邮件标记:测试邮件内容别包含敏感关键词,收件人地址要真实,别批量发送测试邮件触发GoDaddy的反垃圾机制
内容的提问来源于stack exchange,提问作者Saqib A. Azhar
相关产品推荐
相关产品推荐

