<?PHP
$user = "email@domain.com";
$password = "password123";
$mbox = imap_open("{exchange01:993/imap/ssl/novalidate-cert}", $user, $password);
$message = imap_fetchbody($mbox,1,1);
print_r($message);
if($mbox)
{
imap_close($mbox);
};
?>
整个html主体都被打印出来了。我想这是可以预料的,但我不想有这种情况发生。
<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=iso-8859-1"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:Verdana;
panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
{font-family:"Neo Sans Std";}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri",sans-serif;
mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:#0563C1;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:#954F72;
text-decoration:underline;}
span.E-postmall17
我只需要邮件正文的文本内容(签名、图片等内容我可以忽略)。
难道没有更简单的方法吗?比如说将长字符串粗略地分割成从<body...
到</body...
然后再进一步分割?肯定有其他人也想解决同样的问题,但我在花了一整天的时间尝试和Google搜索之后仍然找不到答案。
我猜最终我只能将整个HTML响应插入数据库字段中,希望一切顺利,但我还是不愿意这么做。
求助啊,Stackoverflow!你是我的救星
解决方案编辑:
虽然不是我想要的完美解决方案,但它确实有效(需要稍作修改)。
echo strip_tags($message, '<body>');
仅输出
<body...>
Yayh the text i want!
</body .....>
部分。非常感谢@ThisGuyHasTwoThumbs(在评论中)。
编辑:
最终代码大致如下:
<?PHP
$user = "email@domain.com";
$password = "password";
$mbox = imap_open("{exchange01:993/imap/ssl/novalidate-cert}", $user, $password);
$message = imap_fetchbody($mbox,1,1);
$message = strip_tags($message, '<body>');
$message = explode(">", $message);
$message = explode("<", $message[1]);
$message = str_replace(" ", "", $message[0]);
$message = html_entity_decode($message);
$message = trim($message);
//Or the above three combined in one row
#$message = trim(html_entity_decode( str_replace(" ", "", $message[0])));
echo $message;
if($mbox)
{
imap_close($mbox);
};
?>
该操作将删除变量开头的第一个<body something something something>
和结尾处的</body>
,然后消除开头和结尾处的空格。同时,它还将转换html编码的“字母”为其对应的字符,并删除  
等标记。
imap_fetchbody($mbox,1,1);
是下载邮件正文的正确方法,下载的内容是您在上面看到的内容(+更多HTML文本,最后一些<body> YAYH THE TEXT I WANT(带有一些更多的HTML垃圾)</body>。 - Tamazinstrip_tags
来摆脱其余的内容。 - treyBake