对于我的一个项目,我正在寻找一个好的(轻量级)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 Software MIME C++ Library —商业和专注于Windows.
我真的不想编写自己的MIME解析器. MIME非常普遍,必须有一些开放的库才能以理智的方式处理这种文件格式.
那么,你们有任何想法,建议或链接吗?
提前致谢!
解决方法
如果你实际上期望它除了在’:’上分割标题之外做任何事情并且对Content-Type标题进行偶然解析以寻找边界字符串然后去,那么实际上没有“轻量级”mime解析器这样的东西.处理非嵌套的多部分(在解析http响应和预控制mime消息之外无用,你可以控制它的组成).
就代码行而言,像GMime这样的解析器是如此“大”的原因是因为它们适用于实际需要正确且强大的mime-part和头部解析/解码的开发人员.请参阅我关于decoding rfc2047 encoded-word tokens的咆哮,了解它有多复杂(btw,除了GMime和MimeKit之外,我还没有找到任何能够处理我的rant中讨论的所有边缘情况的开源mime解析器).
即使具有所有这些额外的强大处理,它仍然比大多数“轻量级”mime解析器可能更快或更快,特别是考虑到大多数使用readline方法.我见过“轻量级”mime解析器声称在2-3秒内解析25MB的电子邮件文件,并认为这是“快”.我的单元测试GMime解析2 mBox文件,其中包含大于1.2GB(是的,千兆字节)的消息,时间比此短.
我的观点是,“轻量级”是不知道他们在谈论什么的人的废话标准.
如何根据rfc合规性等有意义的事情来判断?或者通过rfc合规性和性能的组合?无论哪种方式,GMime都会在你做出的任何有意义的比较中成为赢家.