我们的网络系统中有几页使用.net system.net.mail控件发送电子邮件。事情一直很好,除了它现在开始看起来像smptclient类可能实际上没有断开与服务器的连接,这样SMTP服务器使该连接保持打开状态,我们最终最大化了我们被允许的连接数虽然一次只发送一封电子邮件,但在SMTP服务器上一次打开。
(为了记录,这是一个用VB编写的.net 2.0 asp.net应用程序,我们相信这不是某种安全/病毒/垃圾邮件直通情况。)
谷歌和MSDN没有提出任何结论,但在博客文章中只有足够的异端,以确认我们可能不会产生幻觉。
其他任何人都遇到过这个问题吗? (并设法解决它?)
当然,如果它确实可以正常工作,并且我们 产生幻觉,那么也很高兴知道。 ;)
答案 0 :(得分:3)
使用SmtpClient不立即发送电子邮件的问题是因为在某些情况下,它不应该发送SMTP命令'QUIT'(即它没有正确断开连接)。我在过去使用以下代码强制断开连接:
var smtp = new SmtpClient();
smtp.ServicePoint.MaxIdleTime = 1;
smtp.ServicePoint.ConnectionLimit = 1;
smtp.Send(message);
这会强制smtpclient对象在尽可能早的时候断开连接。另外,请确保您的smtpclient实例相当快地超出范围(即,不要在某处存储静态引用)。
答案 1 :(得分:1)
一旦发送了MailMessage,您是否妥善处理了它?我从未见过任何关于SmtpClient没有关闭它的连接的迹象
答案 2 :(得分:1)
您是否检查过StmpClient类的StmpDeliveryMthod属性?
答案 3 :(得分:1)
此类“我连接”问题的一个方便工具是来自SysInternals的 TcpView (\\ live.sysinternals.com \ Tools \ Tcpview.exe)(现在微软)
答案 4 :(得分:1)
确保在邮件服务器上设置这些(假设是Windows) -
[HKEY_LOCAL_MACHINE \ SYSTEM \ CURRENTCONTROLSET \服务\ TCPIP \参数] “TcpTimedWaitDelay的”= DWORD:0000001E “MaxFreeTcbs”= DWORD:000007d0 “MaxUserPort的”= DWORD:0000fffe