解码$ str = imap_fetchbody:$ str ===“”但print_r可以打印它

时间:2013-07-14 19:53:39

标签: php imap

我已转发来自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

1 个答案:

答案 0 :(得分:0)

您可以尝试使用fetch library

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