我已转发来自Thunderbird的带有pdf附件的html消息。 我收到multipart / mixed with 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”)再次返回一个空字符串。 quoted_printable_decode在imap_8bit之前和之后都没有帮助。 netbeans PHP调试器(xdebug)将所有这些字符串声明为空,但宣布变量为'string'。
有人知道如何访问电子邮件文本吗? print_r显示它在那里,但我现在正在撞墙几天没有任何结果。
我可以手动搜索和解码边界等,这不会太难,但是......为什么重新发明轮子?
代码:主要是,我使用了php.net fetch_structure页面中的两个版本以及其他网络资源。我可以将它们添加到这篇文章中,但此刻不想过多夸大它。
* getTxtBody调用get_part * getmesg调用getpart
如果我查看纯文本,我清楚地看到了plain,html和pdf的(嵌套)边界。
非常感谢任何帮助。,Klaus