简单的C++ MIME解析器

5
我想在C++中解析从PHP脚本返回的多部分响应。有人知道一个非常轻量级的MIME解析器可以帮我做到这一点吗?
4个回答

17

我知道现在可能有点晚了,但我有类似的需求。我只想要一个MIME解析器来处理编码和解码MIME格式的内容。为了完整性和可搜索性,我认为我应该在这里记录一下我的发现。请记住,我不关心发送和接收电子邮件,只关心编码和解码MIME。以下是我研究的C++ MIME库:

http://www.vmime.org/ - 看起来太重了。包含pop、SMTP、tls、IMAP,可以移除一些。支持Posix和Windows。

http://codesink.org/mimetic_mime_library.html - 看起来很有前途。非常好的API用于读取和创建消息。我选择了这个库,它并不太重。我需要“修复”两个问题。首先是对于多部分内容,代码仅检查字符串“multipart”,而无法识别“multipart/mixed”并且无法输出各部分。其次,我必须修改mimeentity write代码。因为它只是写出了std::deque Field,而由于这些都是字符串,所以看起来是按字母顺序进行排序的。这是个问题,因为MIME版本必须是第一个写出的字段。所以我解决了这个问题。我还需要添加对Content-Length的支持。

http://www.mozilla.org/mailnews/arch/libmime-description.html - 很难找到。必须下载整个包。mailnews\mime\src

http://www.example-code.com/vcpp/smime.asp - 没有源代码,而且只适用于Windows,因此不予考虑。

http://httpd.apache.org/docs/2.2/mod/mod_mime.html - 找不到该C实现。

尽管我需要添加一些东西,但我选择了Mimetic来满足我的需求。 我发现没有一个我找到的解析器能够很好地处理可选字段(如Content-Length等)。 我还需要它支持多个平台(Windows、Linux等)。


1
http://www.scalingweb.com/mime_parser.php 看起来已经发生了变化 - 现在导向一个售卖称重设备的网站。 - Jonathan Ben-Avraham

8

不是要吹嘘自己,但GMime是一个非常完整的用C语言编写的MIME解析器,可以处理Content-Length头部。它还可以轻松处理DOS和UNIX换行符,处理破损的头部字符集编码,不需要您将整个消息读入内存,支持PGP/MIME等。它还有一套非常全面的单元测试,我用它来防止任何回归。

人们已经在Windows上构建了它相当长一段时间(在cygwin和/或mingw32下),但过去一周左右,我花时间设置Visual C++项目/解决方案文件并确保一切都能构建,使Windows成为首要任务。

尽管您已经找到了一个MIME解析器,但我认为发布这篇文章仍有必要,以便其他可能有类似问题的人看到另一个选项,如果前面提到的解决方案不适合他们的需求。


1

我到目前为止一直使用cpp-netlib的mime code,取得了成功。它对语法有点挑剔,但运行效果很好。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接