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: 用户名和密码
- Host:
本地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会自动验证你的主机身份)
- Host:
- 代码示例:
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
相关产品推荐
相关产品推荐

