我的任务是研究我们拥有的电子邮件功能,它使用 uuencoding 将电子邮件发送到其他更广泛接受的东西。我猜有一些收件人没有收到附件(.csv)文件的问题,因为它是 uuencoded。
我猜我们想把它切换到 MIME 编码?
我想得到一些建议,也许是一些好的起点来寻找这样的东西。
是的,您需要切换到 MIME。但是,您应该知道,MIME 不是一种编码,就像 UUEncode 是一种编码一样。MIME 本质上是 rfc822 消息格式的扩展。
您没有指定您打算使用哪种语言,但我建议您查看我编写的 2 个 MIME 库中的 1 个,因为它们是(如果不是)最快且最符合 rfc 的库之一。
如果您打算使用 C 或 C++,请查看GMime。
如果您打算使用 C#,请查看MimeKit。
我可以推荐的唯一其他体面的 MIME 库是libetpan(一个非常低级的 C API)和vmime(一个多合一的 C++ 库,它执行 MIME、IMAP、SMTP、POP3 等)。
libetpan 与 GMime 相比唯一的“优势”是它实现了自己的数据结构库,它在内部使用,而不是像我对 GMime 所做的那样,即重用一个广泛可用的名为 GLib 的库。不过,GLib 在每个平台上都可用,因此我重新发明轮子似乎毫无意义——另外,GLib 提供了一个我大量使用的引用计数对象系统。出于某种原因,我想不通,人们对依赖 GLib 感到厌烦,抱怨“天哪,依赖!” 好像他们还没有添加对 MIME 库的依赖...
哦...我想如果您使用的是 Java,您可能应该考虑使用JavaMail。
除此之外,我从未见过其他可接受的 MIME 库。说真的,他们中的 99% 都遭受了与我在最近的一篇博客文章中咆哮的相同的设计和实现缺陷。虽然这篇博文专门针对 C# MIME 解析器,但对于我见过的所有 JavaScript、C、C++、Go、Python、Eiffel 等实现(我见过很多)也是如此。
例如,我最近被要求查看一个流行的 JavaScript MIME 解析器。它所做的第一件事是在整个 MIME 消息输入字符串上使用 strsplit() 将其拆分为“\r\n”。然后它通过':'再次遍历每一行strsplit(),然后通过','来遍历strsplit()地址标题,依此类推......它从字面上尖叫业余时间。太糟糕了,我本来可以哭的(但我没有哭,因为我就是那样的男子气概)。