写点什么

MailKit 正式替换了.NET 的 SmtpClient

  • 2017-04-17
  • 本文字数:1055 字

    阅读完需:约 3 分钟

SmtpClient 的文档现已改成:“废弃(“SmtpClient 及其相关类型设计很差,我们强烈建议使用 https://github.com/jstedfast/MailKit https://github.com/jstedfast/MimeKit 替代。”)”。这是 Microsoft 有史以来第二次将一个.NET 类正式标为被开源软件库替代。

MailKit MimeKit 的创建者是 Jeffrey Stedfast,InfoQ 曾在 2014 年采访过他。在当时,它们已被认为是.NET 上最全面的 MIME 和电子邮件库。

Newtonsoft 的 JSON.NET 是被 Microsoft 接受的首个重要开源库。JSON.NET 已在 ASP.NET Web API 中广泛使用,并被正式推荐为 Web API 使用的序列化类,通常可替代 JavaScriptSerializer 类。但是不同于 SmtpClient 的是,没有任何一个序列化类因此被标记为废弃。

SmtpClient 的主要问题在于连接生命周期管理混乱。由于连接 SMTP 服务器是一个非常耗时的操作,尤其是需要做认证时,因此每个 SmtpClient 对象都维护了一个内部连接池。

这是一个非常奇葩的设计。以典型的数据库连接为例,当在 SqlClient 命名空间中调用 Dispose 方法时,底层的连接会返回到连接池中。当新建一个 SqlClient 时,需要检查连接池中是否已具有连接串相同的活跃连接。

使用 SmtpClient 时,调用 Dispose 方法会关闭所有连接并清空对象的连接池。这意味着不能通过常规的“using”语句调用该方法。

你可能会想到,“那么我可以持续维护一个类似于 HttpClient 的共享实例”。但这也行不通。因为不同于在 HttpClient 中,Send 和 SendAsync 方法并非是线程安全的。除非你引入了自定义的同步模式,否则不能以这种方式使用 SmtpClient。事实上, SmtpClient 的文档中已给出了警告:

SmtpClient 无法判定一个应用何时能完成,何时应被清除。

相比之下, MailKit 的 SMTP 客户端表示的是一个到单个服务器的简单连接。它消除了由内部连接池所导致的复杂性。如果使用 MailKit 连接对象只需创建应用特定的连接池,这的确简化了操作。

虽然活跃的 MailKit 软件缺陷数非常少,但在对异步操作的真正支持上,它的确还存在着问题。要对已有软件库中添加异步操作,一般方法是拷贝全部方法并稍作修改以支持异步操作。在一些简单的应用中,这并非难事。但是对于邮件客户端这样的复杂应用,这会导致一场噩梦。当前MailKit 只是简单地调用了同步代码路径和阻塞线程,模拟了对异步操作的支持。

解决异步问题的方案现在仍未确定,一个正在考虑的方案是使用 AsyncRewriter 工具。它是一个基于 Roslyn 的工具,已被 PostgreSQL 团队用于将其同步代码转换为等价的异步代码。

查看英文原文: MailKit Officially Replaces .NET’s SmtpClient

2017-04-17 19:003259
用户头像

发布了 227 篇内容, 共 81.3 次阅读, 收获喜欢 28 次。

关注

评论

发布
暂无评论
发现更多内容

企业在选择YashanDB数据库时应关注哪些关键指标?

数据库砖家

为何选择YashanDB数据库作为您的数据管理平台?

数据库砖家

以YashanDB为核心构建企业数字化基础设施

数据库砖家

BadSuccessor攻击检测工具 - 发现Windows Server 2025中的Active Directory权限提升漏洞

qife

PowerShell Active Directory

一文让你全方面了解云管平台

行云管家

云计算 云服务 云管平台 云管理

文心大模型及百度大模型内容安全平台齐获信通院大模型安全认证

百度安全

领域驱动设计理解及实践探讨

Damon

2025年6月文章一览

codists

Python

企业如何有效评估YashanDB的实施效果

数据库砖家

为何YashanDB数据库是现代企业数字化转型的选择

数据库砖家

告别OOM!SpringBoot内存泄漏的11个排查方法

Geek_e3e86e

Java 编程

YashanDB的事务处理特性

数据库砖家

为什么YashanDB适合中小企业?成本效益分析

数据库砖家

企业如何优化YashanDB的查询性能?实用策略总结

数据库砖家

携手火山引擎,顺丰科技用AI重塑供应链

新消费日报

为什么YashanDB数据库是数据驱动企业的选择?

数据库砖家

开源破界,智控赋能:解锁企业能源管理新维度

开源能源管理系统

开源 能源管理

企业为什么选择YashanDB数据库?七大核心优势解析

数据库砖家

“企业级敏捷教练课程” CSP-SM认证 | 9月13-14日 · 周末班

ShineScrum

敏捷 敏捷教练 ScrumMaster认证 CSM认证 CSM认证培训

为什么选择YashanDB数据库作为您的数据解决方案

数据库砖家

为什么选择YashanDB作为你的数据库平台?

数据库砖家

25年青岛正规等保测评机构信息看这里!

行云管家

等保 等保测评

为什么YashanDB数据库是大数据处理的理想选择?

数据库砖家

为什么选择YashanDB作为您的数据存储解决方案?

数据库砖家

共筑 AI 时代金融数据新基座,平凯星辰亮相中国国际金融展

TiDB 社区干货传送门

从MPP到NewSQL:TiDB全面替代Greenplum的技术必然性

TiDB 社区干货传送门

TiDB第四届征文-业务场景实战

企业云端环境下YashanDB数据库部署实战指南

数据库砖家

什么是YashanDB?深入解析企业级数据库解决方案

数据库砖家

什么是 MPP 数据库?解锁海量数据分析的关键技术

镜舟科技

数据分析 查询优化 StarRocks 分布式计算框架 MPP数据库

Presto在B站的应用

数新网络官方账号

实战解析京东商品评论API:评价情感分析与行业应用案例

tbapi

京东商品评论接口 京东评论API 京东商品评论内容采集

MailKit正式替换了.NET的SmtpClient_.NET_Jonathan Allen_InfoQ精选文章