我讨厌在这里发布一个堆栈跟踪,但我没有想法......我的应用程序在网站上发送各种任务的电子邮件,90%的时间都没有问题。但是,ASP.NET经常会抛出一个奇怪的异常,这似乎与邮件服务器连接有关(我使用谷歌业务服务器来处理电子邮件)。这个错误对我来说太通用了,所以下面的堆栈跟踪。我的应用程序捕获异常并回写一个通用的'在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)
答案 0 :(得分:6)
我过去曾在批量电子邮件系统上工作过。您获得的异常消息完全是描述性的:SMTP服务器暂时不接受邮件。这可能是由于许多条件造成的:
以后重试电子邮件始终有效的事实表明这是正常的预期行为。没有什么可以做的不同以避免这种情况,这是ISP在需要时用来限制流量的常用方法。
答案 1 :(得分:0)
除了Dave Swersky已经说过的话: 您可以存储要在某处发送的电子邮件(如文件系统或数据库),并让服务器生成电子邮件。您的服务会关注要发送的新电子邮件。如果发送时发生错误,您可以将电子邮件放回队列中,稍后再试。
也许您甚至可以使用使用GoogleMail作为中继服务器的本地STMPServer。在这种情况下,您可以使用内置的拾取目录功能,而不是自己编写。