9 月 13 日,2025 Inclusion・外滩大会「开源嘉年华」正在限量报名中! 了解详情
写点什么

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:003353
用户头像

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

关注

评论

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

选择美国高防服务器,保障您的业务不受网络攻击

一只扑棱蛾子

美国高防服务器 高防服务器

华新丽华∣国产化价值替代的先行者

用友BIP

用友 Fast by BIP

大模型训练:Transformer模型、架构与训练方法

百度开发者中心

人工智能 大模型训练

数字孪生智慧市政三Web3D可视化管理平台

2D3D前端可视化开发

物联网 可视化 智慧城市 数字孪生 智慧市政

ABAQUS常用的插件及使用介绍-ABAQUS软件教程

思茂信息

abaqus 有限元仿真 有限元技术

数据库安全运维是什么意思?数据库安全运维系统用哪家好?

行云管家

数据库 数据安全 数据库安全 数据安全运维

七个开发者不可不知的VS Code小技巧

树上有只程序猿

vscode

深度学习CV任务的突破与优化

百度开发者中心

人工智能 深度学习 大模型训练

MySQL的自增id会用完吗?用完怎么办

互联网工科生

MySQL MySQL自增ID

HarmonyOS语言基础类库开发指南上线啦!

HarmonyOS开发者

HarmonyOS

开源贡献难吗?

字节跳动云原生计算

flink 开源 字节

低代码如何赋能实体经济走向数实融合

力软低代码开发平台

通过 Random 和 UUID 算法实现 JMeter 的随机数生成

Liam

程序员 测试 Jmeter 测试工具 随机数

OpenHarmony应用全局的UI状态存储:AppStorage

OpenHarmony开发者

OpenHarmony

2023年知名国产数据库厂家汇总

行云管家

数据库 国产化 数据运维 数据安全运维 信创国产化

报名倒计时 | 超硬核!第四届中国云计算基础架构开发者大会邀你参会

OpenAnolis小助手

云原生 深圳 龙蜥社区 机密计算 CID

大模型训练的轻量化视觉预训练模型

百度开发者中心

人工智能 大模型训练

优化模型之”标注错误“

矩视智能

深度学习 机器视觉

重构AI智慧未来,小度全屋智能生态再进化

新消费日报

NFTScan 支持非 EVM 公链的 NFT Collection 的认证功能

NFT Research

NFT NFT\ NFTScan

双翻页大屏看书,Mate X5上的华为阅读让你“阅”如纸上

最新动态

内部即时通讯软件,为企业协同办公保驾护航

BeeWorks

私有化部署助力企业信息安全,WorkPlus助您完美替代企微、钉钉、飞书!

BeeWorks

全球领先的即时通讯厂家,为企业提供卓越沟通解决方案

BeeWorks

九月 Web3 游戏报告: 数量增长,巨头入场,用户获取和留存仍存挑战

Footprint Analytics

区块链游戏 NFT Web3 游戏 Web3 Games

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