有没有办法关闭邮件smtp会话

本文关键字:smtp 会话 有没有 | 更新日期: 2023-09-27 17:55:51

我正在使用Gmail STMP服务器发送电子邮件。它工作得很好。但几天后,它有时会停止工作。现在,它只工作了 5 次中的 10 次。

例外:Failure Sending Email

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

在与托管技术支持交谈后,他们说他们的服务器上有邮件会话限制。这是一个"共享主机",所以当它超过所有新连接时都会阻塞。他们说他们正在努力解决这个问题。但也说请检查您是否"正确关闭邮件会话"。

我调查了一下,但没有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()的方法。

有没有办法关闭邮件smtp会话

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方法。所以应用程序必须调用释放以显式释放资源。

解决方法循环访问所有已建立的连接到主机中指定的 SMTP 服务器属性并发送 QUIT 消息然后优雅地结束 TCP连接。"处置"方法也释放使用的非托管资源通过底层套接字。