【问题标题】:Is there any way to close mail smtp session?有什么方法可以关闭邮件 smtp 会话吗?
【发布时间】:2011-08-21 16:11:33
【问题描述】:

我正在使用 Gmail STMP 服务器发送电子邮件。它工作得很好。但是从几天开始,它有时会停止工作。现在,它只能工作5 out of 10 次。

例外: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 msg = new MailMessage();

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

NetworkCredential info = new NetworkCredential("email", "password");

然后还有另一个方法调用sc.Send()

【问题讨论】:

  • 请发布您当前的代码。明确您使用的是 System.Net.Mail、System.Web.Mail 还是其他解决方案

标签: c# .net smtp


【解决方案1】:

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 以显式释放 资源。

Dispose 方法遍历 所有已建立的连接到 主机中指定的 SMTP 服务器 属性并发送 QUIT 消息 然后优雅地结束 TCP 联系。 Dispose 方法也 释放使用的非托管资源 通过底层 Socket。

【讨论】:

  • 谢谢。我将在所有应用程序中应用它,看看它是否有效。
  • IDisposeable 直到 4.0 版才添加
猜你喜欢
  • 2011-02-27
  • 2011-01-12
  • 2019-05-24
  • 1970-01-01
  • 2013-04-13
  • 2015-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多