我想消化从 PHP 脚本发回的 C++ 中的多部分响应。任何人都知道可以为我做到这一点的非常轻量级的 MIME 解析器吗?
4 回答
我知道这可能太少、太晚了,但我也有类似的需求。我想要一个 MIME 解析器,它只对 MIME 进行编码和解码。为了完整性和谷歌的能力,我认为我应该把我的发现放在这里。请记住,我对发送和接收邮件不感兴趣,只是对 MIME 进行编码和解码。以下是我为 C++ MIME 研究的库:
http://www.vmime.org/ - 看起来太多了。包含pop、SMTP、tls、IMAP,可以去掉这个。Posix 和窗口。
http://codesink.org/mimetic_mime_library.html - 看起来很有希望。用于读取和创建消息的非常好的 api。和这个一起去了。不太重。必须“修复”两件事。首先对于多部分,代码只是检查字符串“multipart”并且没有识别“multipart/mixed”并且没有写出这些部分。其次,我不得不破解 mimeentity 编写代码。它只是写出 std::deque 字段,由于这些是字符串,它似乎是按字母顺序执行的。这是个问题,因为 MIME 版本必须是第一个写出的字段。所以我解决了这个问题。我还必须添加对 Content-Length 的支持。
http://www.mozilla.org/mailnews/arch/libmime-description.html - 很难找到这个。不得不下载整个包。邮件新闻\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 等)
不要在这里自吹自擂,但GMime是一个非常完整的 MIME 解析器,用 C 编写,可以处理 Content-Length 标头。它还可以轻松处理 DOS 和 UNIX 行尾,处理损坏的标头字符集编码,不需要您将整个消息读入 RAM,支持 PGP/MIME 等。它还有一套非常全面的单元测试,我用于防止任何回归。
人们已经在 Windows 上构建它已经有一段时间了(在 cygwin 和/或 mingw32 afaik 下),但在过去一周左右,我一直在花时间通过设置 Visual C++ 项目/解决方案文件来使 Windows 成为一流的优先事项并确保一切都建立起来。
即使您已经找到了 MIME 解析器,我想我也会发布,这样如果上述解决方案不适合他们的需求,可能有类似问题的其他人可能会看到另一种选择。
使用正则表达式从 mime 多部分数据中更好地减少您需要的内容。并且不需要学习新的库。有简单的 php 解析器https://github.com/breakermind/PhpMimeParser/blob/master/PhpMimeParser_class.php但使用正则表达式,您可以非常简单地用 C++ 编写它。只有 357 行。