.NET System.Net.Mail.SmtpClient类不发出quit命令SMTP交易(.N

2019-08-16 17:00发布

有没有人有这个问题? 如果是这样,你如何避开它? 我们正在零星的超时问题,这是越来越受到指责。

同样的问题在这里也报道说:

http://www.vbforums.com/showthread.php?p=3609268

Answer 1:

我不知道是否有一个更简单的解决此问题的具体方式,但其中一个方案是下载的Mono的SmtpClient源和(如果需要修改)使用。 他们的版本绝对不会发送QUIT命令。

我工作在一个项目上要求我们发送大量的电子邮件。 NET的执行是效率太低,不提供任何方法来发送多个不同的邮件在同一个SMTP会话。 我们倒在使用Mono的实施和修改它允许当QUIT命令被送到我们手动控制和连接关闭。 共有25个相关的单班,我们必须融入我们的项目为这个(主要是复制粘贴+和编辑命名空间)是。

这似乎有点极端,但如果没有办法来解决这个问题,它可能是你最好的第三方替代:它是免费的,它不是工作的一个伟大的交易,它的API是几乎等同于天然SmtpClient的。



Answer 2:

在机器上运行有IIS应用程序? 如果是这样,你可以利用内置的SMTP服务设置您的SMTP客户端这样的交付方式:

var client = new SmtpClient 
{ 
    DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis 
};

我在几个应用程序中使用此,它是非常可靠的。



Answer 3:

它在.NET 4解决他们实施IDispose这将QUIT命令和释放资源。

这是MSDN上的相关文件的副本:

该SmtpClient类没有定案方法,所以应用程序必须调用Dispose明确地释放资源。 通过在主机属性中指定的SMTP服务器的所有已建立的连接Dispose方法迭代,并发送一个退出消息,然后结束正常的TCP连接。 Dispose方法还释放由插座占用的非托管资源,还可以被管理的资源的处置。

调用Dispose当您使用SmtpClient完成。 Dispose方法离开处于不可用状态的SmtpClient。 调用Dispose后,必须释放所有引用到SmtpClient所以垃圾回收器才能收回该SmtpClient占用的内存。



Answer 4:

貌似我要找到一个第三方产品来解决这个问题。 单声道解决方案听起来有趣,但我宁愿花几块钱,并得到一个商业解决方案。



文章来源: .NET System.Net.Mail.SmtpClient class doesn't issue QUIT command to SMTP transaction
标签: .net smtp