我需要能够从php脚本中使用我的gmail。但无论我尝试什么,消息体都出现了所有蹩脚的字符,如= 3D和随机等号。有时它会以base64形式出现,或者根本没有。如果没有可用的HTML,如何获取电子邮件并在HTMLPurifier中清除html或pre-plain中的纯文本。
$overview = imap_fetch_overview($inbox,$email_number,0);
$body_pre = imap_fetchbody($inbox, $email_number, 2.1);
$message = imap_fetchbody($inbox, $email_number, 2.2);
$message = base64_decode($message);
if (empty($message))
{
$message = $body_pre;
$message = preg_replace('@(https?://([-\w\.]+)+(:\d+)?((/[\w/_\.%\-+~]*)?(\?\S+)?)?)@', '<a href="$1">$1</a>',$message);
$message = '<pre>'.htmlentities($message).'</pre>';
}else{
$cleanconfig = HTMLPurifier_Config::createDefault();
$cleanconfig->set('Core.Encoding', 'UTF-8');
$cleanconfig->set('HTML.Doctype', 'HTML 4.01 Transitional');
$purifier = new HTMLPurifier($cleanconfig);
$message = $purifier->purify($message);
}
此代码,$ message只是空白。
答案 0 :(得分:2)
您假设您的邮件始终位于2.2位置?绝对没有保证......取决于发送什么信息你计划文本(只有一个身体),html /文本(两个),附件(三个加)回复另一个电子邮件(然后另一个电子邮件将是一个身体与它是自己的子机构。)
=3D
(引用的可打印)和base64数据是由于邮件正文编码造成的。看看imap_fetchstructure
,它解释了他们在邮件上有多少部分(您可以搜索它以查找文本),并查看每个正文的->type
组件以了解它的编码(type =引用4是可打印的,type = 3是base64)