0

我已经转发了来自 Thunderbird 的带有 pdf 附件的 html 消息。我收到 multipart/mixed 与 multipart/alternative 包含 html 和 txt-plain,以及 pdf base 64 编码。multipart/alternative 是 8 位,charset=UTF8。

我已经尝试了 php.net 上 imap:fetchstructure/fetchbody 手册页上评论中的几乎所有建议。它们包括解码(至少对于编码 = 1、3、4)、应用 imap_8bit、imap_qprint 和 imap_base64。手动查看 txt/plain 显示 encoding = 1,因此应用了 imap_8bit。

示例函数甚至无法确定返回的文本是纯文本还是 html,因为在所有情况下,因为返回的 $str 始终是 === "" (空字符串)。

接下来,我不小心尝试了 print_r($str) (如果 imap_8bit 没有完成),它具有所需的电子邮件文本。我认为这可能是没有 imap_8bit 的多字节,而 mb_detect_encoding 返回 UTF8(正如我在原始电子邮件文本中看到的那样)。

再次尝试 mb_convert_encoding($str, "ASCII") 会返回一个空字符串。在 imap_8bit 之前和之后,quoted_printable_decode 都没有帮助。netbeans PHP 调试器 (xdebug) 将所有这些字符串声明为空,但声明变量为“字符串”。

有人知道如何获取电子邮件文本吗?print_r 显示它就在那里,但是我已经把头撞到墙上好几天了,没有任何结果。

我可以手动搜索和解码边界等,这不会太难,但是......为什么要重新发明轮子?

代码:主要是,我使用了来自 php.net fetch_structure 页面和其他网络资源的两个版本。我可以将它们添加到这篇文章中,但此时不想把它炸得太多。

*getTxtBody 调用 get_part *getmesg 调用 getpart

如果我查看纯文本,我会清楚地看到纯文本、html 和 pdf 的(嵌套)边界。

非常感谢任何帮助。,克劳斯

4

1 回答 1

0

您可以尝试使用fetch library

要解码标头,您可以使用iconv_mime_decode

于 2013-07-14T20:02:35.153 回答