Mat*_*zek 13
建议使用开源解决方案,__CODE__而不是SmtpClient,是的.它在库中没有被标记为过时的原因是.NET框架中没有替代品.
Microsoft已正式将.NET类标记为由开放源代码库替代。
SmtpClient现在的文档内容如下:
已淘汰(“ SmtpClient及其类型的网络设计不良,我们强烈建议您改为使用https://github.com/jstedfast/MailKit和 https://github.com/jstedfast/MimeKit ”)
SmtpClient的主要问题在于它具有混乱的连接生命周期。
连接到SMTP服务器可能很耗时,尤其是在启用身份验证的情况下,因此每个SmtpClient对象都有一个内部连接池。
这是一个很奇怪的设计。考虑一下典型的数据库连接。当您在上调用Dispose时SqlClient,基础连接将返回到池中。创建new时SqlClient,将检查池中是否存在具有相同连接字符串的活动连接。
使用SmtpClient,调用将Dispose关闭所有连接并耗尽该对象的连接池。这意味着您不能将其与典型的using块模式一起使用。
HttpClient不能在中使用共享实例的众所周知方法,例如SmtpClient。
好吧,不。与方法不同HttpClient,Send/ SendAsync方法不是线程线程安全的。因此,除非要引入自己的同步方案,否则也不能那样使用。实际上,文档SmtpClient警告:
相比之下,MailKit中的SMTP客户端表示与单个服务器的简单连接。通过消除内部连接池引起的复杂性,实际上可以更轻松地为MailKit的连接对象创建特定于应用程序的池。