You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GoDaddy主机部署ASP.NET MVC应用,SMTP发邮件本地正常线上报错

问题背景
  • 托管平台:GoDaddy Windows Hosting
  • 开发平台:ASP.NET MVC C# .NET Framework 4.8
  • 邮箱服务:Microsoft 365
  • 原SMTP设置:
    • Host: smtp.office365.com
    • Port: 587
    • DeliveryMethod: Network
    • EnableSsl: true
    • Credentials: 用户名和密码

本地IIS Express运行Web应用时,发送邮件功能正常;但部署到GoDaddy托管服务器后,smtp.send()抛出错误,错误详情如下:

{
  "ClassName": "System.Net.Mail.SmtpException",
  "Message": "**Failure sending mail.**",
  "Data": null,
  "InnerException": {
    "ClassName": "System.Net.WebException",
    "Message": "Unable to connect to the remote server",
    "Data": null,
    "InnerException": {
      "NativeErrorCode": 10013,
      "ClassName": "System.Net.Sockets.SocketException",
      "Message": "**An attempt was made to access a socket in a way forbidden by its access permissions**",
      "Data": null,
      "InnerException": null,
      "HelpURL": null,
      "StackTraceString": " at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)\\r\\n at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Exception& exception)",
      "RemoteStackTraceString": null,
      "RemoteStackIndex": 0,
      "ExceptionMethod": "8\\nDoConnect\\nSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\\nSystem.Net.Sockets.Socket\\nVoid DoConnect(System.Net.EndPoint, System.Net.SocketAddress)",
      "HResult": -2147467259,
      "Source": "System",
      "WatsonBuckets": null
    },
    "HelpURL": null,
    "StackTraceString": " at System.Net.ServicePoint.GetConnection(PooledStream PooledStream, Object owner, Boolean async, IPAddress& address, Socket& abortSocket, Socket& abortSocket6)\\r\\n at System.Net.PooledStream.Activate(Object owningObject, Boolean async, GeneralAsyncDelegate asyncCallback)\\r\\n at System.Net.PooledStream.Activate(Object owningObject, GeneralAsyncDelegate asyncCallback)\\r\\n at System.Net.ConnectionPool.GetConnection(Object owningObject, GeneralAsyncDelegate asyncCallback, Int32 creationTimeout)\\r\\n at System.Net.Mail.SmtpConnection.GetConnection(ServicePoint servicePoint)\\r\\n at System.Net.Mail.SmtpTransport.GetConnection(ServicePoint servicePoint)\\r\\n at System.Net.Mail.SmtpClient.GetConnection()\\r\\n at System.Net.Mail.SmtpClient.Send(MailMessage message)",
    "RemoteStackTraceString": null,
    "RemoteStackIndex": 0,
    "ExceptionMethod": "8\\nGetConnection\\nSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\\nSystem.Net.ServicePoint\\nSystem.Net.Sockets.Socket GetConnection(System.Net.PooledStream, System.Object, Boolean, System.Net.IPAddress ByRef, System.Net.Sockets.Socket ByRef, System.Net.Sockets.Socket ByRef)",
    "HResult": -2146233079,
    "Source": "System",
    "WatsonBuckets": null
  },
  "HelpURL": null,
  "StackTraceString": " at System.Net.Mail.SmtpClient.Send(MailMessage message)\\r\\n at Inol.BAL.EmailMgmt.SendTestEmail() in C:\\code\\inol\\Inol\\BAL\\EmailMgmt.cs:line 283\\r\\n at Inol.Controllers.TestEmailController.Index(TestEmailModel model) in C:\\code\\inol\\Inol\\Controllers\\TestEmailController.cs:line 30",
  "RemoteStackTraceString": null,
  "RemoteStackIndex": 0,
  "ExceptionMethod": "8\\nSend\\nSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\\nSystem.Net.Mail.SmtpClient\\nVoid Send(System.Net.Mail.MailMessage)",
  "HResult": -2146233088,
  "Source": "System",
  "WatsonBuckets": null,
  "Status": -1
}

已尝试将端口改为25,但结果相同,寻求解决套接字访问权限被禁止的问题。


解决方法

1. 改用GoDaddy内置SMTP中继服务器

GoDaddy Windows Hosting默认会禁止应用直接连接外部SMTP服务器(如Office365的smtp.office365.com),这是出于反垃圾邮件的限制。改用GoDaddy提供的内部中继服务器即可解决:

  • SMTP设置修改为:
    • Host: relay-hosting.secureserver.net
    • Port: 25
    • EnableSsl: false
    • 无需设置Credentials(GoDaddy会自动验证你的主机身份)
  • 代码示例:
using System.Net.Mail;

var smtpClient = new SmtpClient("relay-hosting.secureserver.net", 25)
{
    EnableSsl = false,
    DeliveryMethod = SmtpDeliveryMethod.Network
};
smtpClient.Send(mailMessage);

2. 检查GoDaddy主机邮件配额与限制

登录GoDaddy主机控制面板,确认:

  • 主机的邮件发送配额是否已用尽
  • 你的域名或IP是否被标记为垃圾邮件导致发送受限
  • 主机是否开启了邮件发送的额外安全限制

3. 替代方案:使用Microsoft Graph API发送邮件

如果必须使用Office365的邮件服务,可放弃SMTP协议,改用Microsoft Graph API发送邮件:

  • 该API通过HTTPS连接,GoDaddy通常允许出站HTTPS请求
  • 需要在Azure AD中注册应用,获取对应的权限(Mail.Send)和访问令牌
  • 代码中调用Graph API的/me/sendMail端点发送邮件

内容的提问来源于stack exchange,提问作者Hardik Parmar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 18:23:20