在使用.NET 3.5的Windows控制台应用程序中(我将现有的.NET 2.0应用程序更改为.NET 3.5)
我有一个奇怪的问题,发送电子邮件的代码可以工作几次(可能是5到10次)。
几次后,它无法发送包含“发送邮件失败”消息的电子邮件。重新启动系统后,相同的代码将起作用。 (这不是生产中的预期解决方案)。
这是一段代码,我觉得,我已经关闭了这个SmtpClient连接。所以我将客户端设置为null并调用GC.Collect,但没有帮助我。
请帮忙
private static void SendEmail(MailMessage msg)
{
SmtpClient client = new SmtpClient(GetSMTPServer(), GetSMTPPort());
client.Credentials = CredentialCache.DefaultNetworkCredentials;
client.EnableSsl = false;
client.ServicePoint.MaxIdleTime = 1;
//client.Timeout = GetSMTPTimeout(); 30000000
client.Send(msg);
client = null;
GC.Collect();
}
答案 0 :(得分:2)
尝试使用using
块在发送后正确处理SmtpClient
。
private static void SendEmail(MailMessage msg)
{
using(SmtpClient client = new SmtpClient(GetSMTPServer(), GetSMTPPort()))
{
client.Credentials = CredentialCache.DefaultNetworkCredentials;
client.EnableSsl = false;
client.Send(msg);
}
}
另请参阅:.NET Best Method to Send Email (System.Net.Mail has issues)
答案 1 :(得分:1)
如果两次邮件发送之间的间隔大于60秒且小于90秒,您肯定会收到此错误。
例如,您在上午8:08:08发送第一封电子邮件,然后在上午8:09:10发送第二封电子邮件,将抛出异常。
这是SmtpClient.TimeOut
设置的错误,您无法更改。
如何解决这个问题? 三种方式:
SmtpClient.Dispose()
适用于.net framework 3.0及以上版本SmtpClient.servicepoint.maxidletime=1000;
设置为1太小,无法在调试模式下工作