.NET发送电子邮件的最佳方法(System.Net.Mail有问题)

这似乎很简单。我需要从一些ASP.NET应用程序发送电子邮件。我需要做到这一点,没有奇怪的错误,没有cpu利用率通过屋顶。我不是在说大量的电子邮件,只是偶尔的电子邮件

System.Net.Mail看起来很可怕。 SmtpClient不会发出Quit命令(这可能是因为Microsoft(R)对以下规范不感兴趣),因此连接将保持打开状态。因此,如果有人尝试在该连接终止之前发送电子邮件,则可以从SMTP服务器收到有关打开的连接数太多的错误信息。这是Microsoft(R)完全不感兴趣的错误。看这里:

http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=146711

另外,如果你环顾一些建议使用这个代码解决这个问题:

smtpClient.ServicePoint.MaxIdleTime = 1;
smtpClient.ServicePoint.ConnectionLimit = 1;

好的,是的,“解决”连接被打开的问题。但是,如果您愿意,可以在服务器上尝试这样做,导致进程(在这种情况下为w3wp.exe)正在运行的cpu跳转并保持100%,直到应用程序池被回收为止。无论什么原因,运行mscorwks.dll!的线程是CreateApplicationContext的罪魁祸首。

这具有非常好的副作用,如果您运行在持续100%cpu使用率的Web主机上,您将使您的应用程序池被禁用。所以这不像一些建议那么微不足道。

所以我的问题是怎么办?我需要做的是如此简单;然而,让这些“连接打开太多”的错误是不可接受的,100%的cpu使用率也是不可接受的。我不想购买第三方组件,而不是因为我很便宜,但是我购买了足够的组件和MSDN订阅,似乎很疯狂,为了简单的SMTP功能,需要支出$ 100- $ 300。

我看到设置MaxIdleTime更高可以帮助,但我怀疑。我不想让我的应用程序池被禁用,因为Microsoft不想遵循SMTP规范。

编辑:我查看了quiksoft.com组件,但它不支持SMTP身份验证,费用为$ 500。必须要解决这个问题。

解决方法

我遇到与所描述的设置相同的cpu利用率问题。我最终用微软打开一张机票来确定问题的原因。 cpu利用率问题在于ServicePoint类。在ServicePoint类内部,有一个运行每个(MaxIdleTime / 2)毫秒的计时器。看到问题?通过将MaxIdleTime值更改为2,cpu利用率将下降到正常水平。

相关文章

这篇文章主要讲解了“WPF如何实现带筛选功能的DataGrid”,文...
本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识...
Some samples are below for ASP.Net web form controls:(fr...
问题描述: 对于未定义为 System.String 的列,唯一有效的值...
最近用到了CalendarExtender,结果不知道为什么发生了错位,...
ASP.NET 2.0 page lifecyle ASP.NET 2.0 event sequence cha...