首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从C/C++中解析简单的MIME文件?

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

Stack Overflow用户
提问于 2010-06-14 14:31:24
回答 5查看 9.9K关注 0票数 9

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

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

基本上,那些MIME文件就像原始的电子邮件,但是没有SMTP头.相反,它们以MIME标题"MIME-Version: 1.0“开头,然后部分如下。

我在应用程序中使用C++,因此欢迎使用C++库。标准C库也是受欢迎的;但它应该符合以下标准:

  • 要开放(至少LGPL),而不是有利的
  • 紧凑-我只需要解析器,没有SMTP/POP3 3支持
  • 跨平台(针对Windows、Mac和Linux)

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

  • 模拟 ( C++ ) --尽管这个库看起来很完整,对于C++的使用来说,它是基于glib的,它不能在Windows上正确编译。
  • 维米 (C++)此外,他们还提供“双重许可”(“商业LGPL”+ GPL)。似乎包含在Ubuntu和Debian中,但授权令人困惑。
  • mime++ --商业的,没有Mac的支持。
  • 智利卡特软件MIME C++库 --商业的,专注于Windows的。

我真的不想写我自己的MIME解析器。MIME非常广泛,因此必须有一些开放的库才能以正常的方式处理这种文件格式。

你们有什么想法,建议或链接吗?

提前感谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-11-27 18:08:39

有一段时间了。所以我会回答我自己的问题。

在这方面花费了更多的时间之后,我最终编写了我自己的实现。MIME确实很简单,如果您阅读了文档,您就可以在短时间内启动并运行一些内容。

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

票数 6
EN

Stack Overflow用户

发布于 2013-09-15 13:52:16

GMime是用C编写的LGPL mime解析器,它确实依赖于glib,但是glib可以在32位64位 (以及所有基于Unix的平台,包括Mac )上使用。它还构建在内部,因此我看不到问题所在。我知道在他们的产品(Kerio,iirc)中至少有1家商业视窗供应商提供libgmime.dll和libglib.dll。诺基亚甚至在一些手机上发布了这款手机。

如果你真的期望它做的不仅仅是':‘上的拆分头,并且对内容类型的头进行随意的解析以查找边界字符串,然后继续处理非嵌套的多个部分(除了解析http响应和预先屏蔽的mime消息之外,您控制它的组合),那么就真的没有所谓的“轻量级”mime解析器了。

就代码行而言,像GMime这样的解析器之所以如此“大”,是因为它们是为真正想要正确和健壮的mime部分和头解析/解码的开发人员准备的。请看我对解码rfc2047编码.字标记的抱怨,了解它会变得多么复杂(顺便说一句,除了GMime和MimeKit之外,我还没有找到任何开源的mime解析器,它能够处理我在“咆哮”中讨论的所有边缘情况)。

即使有了所有这些额外的健壮处理,它仍然比大多数“轻量级”mime解析器可能具有的速度更快或更快,特别是考虑到它们中的大多数使用了读行方法。我看过“轻量级”mime解析器,其目的是在2-3秒内解析25 be的电子邮件文件,并认为这是“快速”的。我的GMime单元测试可以在更短的时间内解析满是大于1.2GB (是的,千兆字节)的消息的mbox文件。

我的观点是,“轻量级”是那些不知道自己在说什么的人的狗屁标准。

根据有意义的内容(如rfc遵从性)进行判断如何?还是rfc遵从性和性能的结合?无论哪种方式,GMime都会在你所做的任何有意义的比较中胜出。

票数 11
EN

Stack Overflow用户

发布于 2012-05-31 15:21:44

我已经成功地在我的MSVC2010中使用了MSVC2010。它也在窗户上工作。而且有麻省理工学院的执照。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3038074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档