下面的代码输出不正确的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);
?>
输出HTML
<td colspan="3D"2""
st="yle=3D"
border-color:rgb(204,204,20=" 4);
border-width:0px="" 0px="" 1px="" 1px;
font-family:ari="al;
color:rgb(255,255,255);
background-color:rgb(123,186,0=" );
text-align:center;
width:100px"="">
答案 0 :(得分:1)
在使用quoted_printable_decode()
显示输出之前,您似乎想要解码输出,具体如下:
foreach ($emails as $email_number)
{
$message = imap_body($sent, $email_number,1.2);
echo quoted_printable_decode($message);
}
在此处详细了解此功能:http://www.php.net/manual/en/function.quoted-printable-decode.php
注意:imap_qprint()
执行相同,也可以使用。
答案 1 :(得分:1)
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库支持大多数必要的操作,但似乎没有简单的方法来获取您需要的表单内容,例如你必须调用所有函数来解析结构,解码和转换自己。