有人有这个问题吗?如果是这样,你怎么绕过它呢?我们正在遭遇零星的超时问题,而这一点受到指责。
此处也报道了同样的问题:
答案 0 :(得分:10)
我不知道是否有更简单的方法来解决这个特定问题,但有一个选择是下载Mono的SmtpClient源并使用它(必要时进行修改)。他们的版本肯定会发送QUIT命令。
我工作的一个项目要求我们发送大量电子邮件。 .NET的实现效率太低,没有提供任何方法在同一个SMTP会话中发送多个不同的电子邮件。我们重新使用Mono的实现并对其进行修改以允许我们手动控制何时发送QUIT命令并关闭连接。我们必须将25个相关的Mono类合并到我们的项目中(主要是复制+粘贴和编辑命名空间)。
这似乎有点极端,但如果没有办法解决这个问题,它可能是你最好的第三方选择:它是免费的,它不是很多工作,它的API 几乎与原生SmtpClient相同。
答案 1 :(得分:4)
您的应用程序是否在具有IIS的计算机上运行?如果是这样,您可以通过设置SMTP客户端的传递方法来利用内置的SMTP服务,如下所示:
var client = new SmtpClient
{
DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis
};
我在一些应用程序中使用它,它非常可靠。
答案 2 :(得分:4)
它在.Net 4中解决。它们实现了IDispose,它发送QUIT命令并释放资源。
这是MSDN上相关文档的副本:
SmtpClient类没有Finalize 方法,所以应用程序必须调用 处理明确释放 资源。 Dispose方法 遍历所有已建立的 与SMTP服务器的连接 在Host属性中指定 发送QUIT消息后跟 优雅地结束TCP连接。 Dispose方法也释放了 Socket使用的非托管资源 并且可选地处理托管 资源。
完成后调用Dispose 使用SmtpClient。处理 方法将SmtpClient留在 无法使用的状态。在调用Dispose之后, 你必须释放所有引用 SmtpClient所以垃圾收集器 可以回收那个记忆 SmtpClient占据了。
答案 3 :(得分:0)
看起来我要找第三方产品来解决问题。单声道解决方案听起来很有趣,但我宁愿花几块钱购买商业解决方案。