C# 使用ASP.NET发送电子邮件时出现临时问题
我不想在这里发布堆栈跟踪,但我已经没有想法了。。。我的应用程序为网站上的各种任务发送电子邮件,90%的时间都没有问题。然而,ASP.NET经常抛出一个奇怪的异常,这似乎与邮件服务器连接有关(我使用谷歌商务服务器发送电子邮件)。这个错误对我来说太普通,无法调试,因此下面是堆栈跟踪。我的应用程序捕获异常并写回一个通用的“5分钟后重试响应” 我被这个错误难住了,因为:C# 使用ASP.NET发送电子邮件时出现临时问题,c#,asp.net,smtp,C#,Asp.net,Smtp,我不想在这里发布堆栈跟踪,但我已经没有想法了。。。我的应用程序为网站上的各种任务发送电子邮件,90%的时间都没有问题。然而,ASP.NET经常抛出一个奇怪的异常,这似乎与邮件服务器连接有关(我使用谷歌商务服务器发送电子邮件)。这个错误对我来说太普通,无法调试,因此下面是堆栈跟踪。我的应用程序捕获异常并写回一个通用的“5分钟后重试响应” 我被这个错误难住了,因为: 谷歌电子邮件通常非常可靠(它是从我的域名发送的,而不是gmail.com) 容量非常低,因此这不应该是一个加载/垃圾邮件类型的问题
- 谷歌电子邮件通常非常可靠(它是从我的域名发送的,而不是gmail.com)
- 容量非常低,因此这不应该是一个加载/垃圾邮件类型的问题
- 错误是非常普遍的
- 在5分钟内再次尝试几乎总是可以让电子邮件发送没有问题,没有任何参数(收件人、主题、正文)发生更改
public static void SendMail(String from, String to, String subject, String body, bool IsHtml)
{
MailMessage m = new MailMessage(from, to, subject, body);
m.IsBodyHtml = IsHtml;
SmtpClient smtpClient = new SmtpClient();
smtpClient.EnableSsl = true;
smtpClient.Send(m);
}
例外情况:
System.Net.Mail.SmtpException: Error in processing. The server response was: 4.3.0 Mail server temporarily rejected message. m6sm2190005vcx.24
at System.Net.Mail.DataStopCommand.CheckResponse(SmtpStatusCode statusCode, String serverResponse)
at System.Net.Mail.DataStopCommand.Send(SmtpConnection conn)
at System.Net.Mail.SmtpConnection.OnClose(Object sender, EventArgs args)
at System.Net.ClosableStream.Close()
at System.Net.Mail.MailWriter.Close()
at System.Net.Mail.SmtpClient.Send(MailMessage message)
我过去曾在批量电子邮件系统上工作过。您收到的异常消息完全是描述性的:SMTP服务器暂时不接受邮件。这可能是由多种情况造成的:
稍后重试电子邮件总是有效的这一事实表明,这是正常的、预期的行为。为了避免这种情况,你没有什么不同的办法,这是ISP在需要时用来限制流量的常用方法。除了Dave Swersky已经说过的: 您可以将要发送的电子邮件存储在某个地方(如文件系统或数据库),并让服务处理生成的电子邮件。您的服务将关注新的电子邮件发送。如果发送时出错,您可以将电子邮件放回队列中,稍后再试
也许您甚至可以使用本地STMPServer,它使用GoogleMail作为中继服务器。在这种情况下,您可以使用内置的pickupdirectory功能,而不是自己编写。对该特定错误执行谷歌搜索表明,这可能是他们知道的谷歌服务器的问题。解决方案待定。根据您的经验。。。在第一次SMTP失败发生后立即尝试第二次,两次之间有1秒的延迟,这是一个好主意吗?这似乎只是暂时的问题(令人惊讶,因为这是谷歌邮件!!?),简单地重复发送似乎可以解决问题。我保证,你不是唯一一个通过谷歌或其他ISP/ESP发送此错误的人。这不一定是谷歌方面的“失败”——该服务器上的队列可能已满,或者存在其他一些常见问题。一秒钟可能不够,我至少要等30秒。