2011-05-09 119 views
7

我使用Gmail STMP服务器发送电子邮件。它工作得很好。但是从几天起,它有时会停止工作。现在,它只能工作5 out of 10次。有什么办法可以关闭邮件smtp会话吗?

例外:Failure Sending Email

内部异常:Unable to connect to remote server.

交谈托管的技术支持后,他们说有他们的服务器上的邮件会话限制。这是一个Shared Hosting,所以当它超过所有新连接阻塞时。他们说他们正在努力解决它。但也说,请检查你是closing the mail session properly or not

我看着它,但没有Close()Dispose()。我也读过SMTP传输没有确认吗?

请让我知道是否有反正关闭邮件会话?或者解决此问题的任何解决方法。

更新

我使用System.Net.Mail

味精MAILMESSAGE新= MAILMESSAGE();

SmtpClient sc = new SmtpClient(“smtp.gmail.com”,587);

NetworkCredential info = new NetworkCredential(“email”,“password”);

然后还有另一种方法叫sc.Send()

+1

请发表您的当前代码。清楚说明您是否使用System.Net.Mail,System.Web.Mail或其他解决方案 – 2011-05-09 13:04:20

回答

12

System.Net.Mail.SmtpClient实现IDisposable,所以我建议你使用它而不是你正在使用的任何代码。使用using块来确保它被正确处置。

特别要注意的是,System.Web.Mail的使用已被弃用,以支持System.Net.Mail

using (SmtpClient client = new SmtpClient("mail.google.com")) 
{ 

} 

编辑 现在,您已经注意到,您正在使用System.Net.Mail。在这种情况下,您会发现SMTPClient 确实有一个Dispose方法(因为它实现了IDisposable),它将优雅地关闭SMTP连接。但是,使用using块而不是直接调用Dispose被认为是更好的做法。最后,请从链接的文档中注意以下内容:

SmtpClient类没有Finalize 方法。因此,应用程序必须调用 Dispose才能明确释放 资源。

通过 到在主机 属性指定的 SMTP服务器的所有已建立的连接Dispose方法迭代,并发送一个退出消息 随后正常结束TCP 连接。 Dispose方法还通过底层套接字释放使用的非托管资源 。

+0

谢谢。我将在所有应用程序中应用此功能,并看看它是否有效。 – 2011-05-09 13:28:33

+2

直到4.0版本才添加IDisposeable – landoncz 2013-11-22 17:51:32

相关问题