当前位置:  开发笔记 > 编程语言 > 正文

从C/C++中解析简单的MIME文件?

如何解决《从C/C++中解析简单的MIME文件?》经验,为你挑选了2个好方法。

我已经在网上搜索了几天,但我似乎无法找到解决问题的好方法:

对于我的一个项目,我正在寻找一个好的(轻量级)MIME解析器.我的客户提供MIME格式的文件(线性,无层次结构),其中包含3-4个"部分".应用程序必须能够拆分这些部件并独立处理它们.

基本上这些MIME文件就像原始电子邮件消息,但没有SMTP标头.相反,它们以MIME-Header"MIME-Version:1.0"开头,之后部分如下.

我正在使用C++作为应用程序,因此欢迎使用C++库.我们也欢迎标准的C库; 但它应符合以下标准:

开放(至少是LGPL),而不是properiaty

紧凑 - 我只需要解析器,没有SMTP/POP3支持

跨平台(针对Windows,Mac OS X和Linux)

经过几天的搜索,我发现了以下库和使用它们的原因:

mimetic(C++)---虽然这个库看起来很完整并且用于C++,但它基于 glib,它不能在Windows上正确编译.

Vmime(C++)---似乎完整,但没有正式的Windows支持.他们还提供"双重许可"("商业LGPL"+ GPL).似乎包含在Ubuntu和Debian中,但许可证令人困惑.

mime ++ ---商业,没有Mac支持.

Chilkat软件MIME C++库 ---商业和专注于Windows.

我真的不想编写自己的MIME解析器.MIME非常普遍,必须有一些开放的库才能以理智的方式处理这种文件格式.

那么,你们有任何想法,建议或链接吗?

提前致谢!



1> jstedfast..:

GMime是一个用C语言编写的LGPL mime解析器.它确实依赖于glib,但是glib可以在Windows上使用:32位和64位(以及所有基于Unix的平台,包括Mac OS X).它也构建在Visual Studio内部,因此我无法看到问题所在.我知道至少有一家商业Windows供应商在他们的产品(Kerio Connect,iirc)中发布了libgmime.dll和libglib.dll.诺基亚甚至将它放在他们的一些手机上.

如果你实际上期望它除了在':'上分割标题之外做任何事情并且对Content-Type标题进行偶然解析以寻找边界字符串然后去,那么实际上没有"轻量级"mime解析器这样的东西.处理非嵌套的多部分(在解析http响应和预控制mime消息之外无用,你可以控制它的组成).

就代码行而言,像GMime这样的解析器是如此"大"的原因是因为它们适用于实际需要正确且强大的mime-part和头部解析/解码的开发人员.看看我对解码rfc2047编码字令牌的咆哮,以了解它有多复杂(btw,除了GMime和MimeKit之外,我还没有找到任何能够处理我所讨论的所有边缘情况的开源mime解析器).

即使具有所有这些额外的强大处理,它仍然比大多数"轻量级"mime解析器可能更快或更快,特别是考虑到大多数使用readline方法.我见过"轻量级"mime解析器声称在2-3秒内解析25MB的电子邮件文件,并认为这是"快".我的单元测试GMime解析2 mbox文件,其中包含大于1.2GB(是的,千兆字节)的消息,时间比此短.

我的观点是,"轻量级"是不知道他们在谈论什么的人的废话标准.

如何根据rfc合规性等有意义的事情来判断?或者通过rfc合规性和性能的组合?无论哪种方式,GMime都会在你做出的任何有意义的比较中成为赢家.



2> BastiBen..:

有一阵子了。因此,我将回答我自己的问题。

在花了更多时间之后,我最终编写了自己的实现。MIME确实非常简单,如果您阅读文档,便可以在短时间内启动并运行。

但是,我认为应该有类似vMime的东西,但是要开源。我不敢相信有这么多人必须处理MIME结构,因为这是一个真正的标准。


Vmime是开放源代码。
推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有