Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php imap fetch_正文输出不正确的html_Php_Html_Gmail_Imap - Fatal编程技术网

Php imap fetch_正文输出不正确的html

Php imap fetch_正文输出不正确的html,php,html,gmail,imap,Php,Html,Gmail,Imap,下面的代码输出不正确的html,并在中间插入一些垃圾字符。我认为解决方案将是基础转换。但我不知道是哪个基地 <?php $hostname = '{imap.gmail.com:993/imap/ssl}[Gmail]/Sent Mail'; $username = '...@gmail.com'; $password = '*****'; $sent = imap_open($hostname, $username, $password) or die('Cannot connect t

下面的代码输出不正确的html,并在中间插入一些垃圾字符。我认为解决方案将是基础转换。但我不知道是哪个基地

<?php
$hostname = '{imap.gmail.com:993/imap/ssl}[Gmail]/Sent Mail';
$username = '...@gmail.com';
$password = '*****';
$sent = imap_open($hostname, $username, $password) or die('Cannot connect to Gmail: ' . imap_last_error());
$emails   = imap_search($sent, 'SUBJECT "Part"');

if ($emails)
{
    foreach ($emails as $email_number)
    {
        $message = imap_body($sent, $email_number,1.2);
        echo $message;
    }
}
imap_close($sent);

?>

看起来您需要先解码输出,然后再使用
quoted\u printable\u decode()
显示输出,具体如下:

foreach ($emails as $email_number)
{
    $message = imap_body($sent, $email_number,1.2);
    echo quoted_printable_decode($message);
}
请在此处阅读有关此函数的更多信息:


注意:
imap\u qprint()
执行相同的操作,也可以使用。

imap只是邮件的传输协议。邮件消息本身可以具有MIME格式的固有结构,例如,带有附件的典型HTML消息将具有以下结构:

mail
|- multipart/mixed
|  |- multipart/alternative
|     |- text/plain - plain text content
|     |- text/html  - HTML content
|- application/octet-stream - the attachment
每个叶部分(例如内容和附件)可能有一个内容传输编码,通常引用为可打印、base64或有时是二进制。文本部分也可能有一个字符集(在内容类型标题中定义),例如utf-8、iso-8859-1等。也可能有用作附件的文本部分,它们的内容处置标题设置为“附件”


要显示邮件的文本,您必须首先找到相关的内容部分,然后对内容传输编码进行解码,然后将所需输出中给定字符集的内容进行转换。IMAP库支持大多数必要的操作,但似乎没有简单的方法可以以您需要的形式获取内容,例如,您必须调用所有函数来解析结构、解码和转换自己。

我编辑了我的答案,以记录这一点,但是我总是喜欢选择一个更具描述性的名称,并且不需要依赖项的函数。我同意,但是这个问题的上下文涉及到
imap\uuuu
库的使用,无论如何,这应该是正确的解决方案。我使用的是text/html。该行中的“1.2”$message=imap_body($sent,$email_number,1.2);你的回答很有启发性。谢谢你。使用quoted_printable_decode()解决了我的问题调用quoted_printable_decode确实解决了您的问题。您尚未解决的问题是,同一条消息可能很容易使用base64编码。这仍然是一封完全有效的电子邮件,但您的代码将无法正常工作,这就是为什么Steffen花时间添加他详细的答案的原因。
mail
|- multipart/mixed
|  |- multipart/alternative
|     |- text/plain - plain text content
|     |- text/html  - HTML content
|- application/octet-stream - the attachment