Php imap fetch_正文输出不正确的html
下面的代码输出不正确的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
<?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