【发布时间】:2014-10-18 21:46:59
【问题描述】:
我只想从 imap_body 结果中提取 HTML 内容。 imap_body 给出邮件的逐字副本。
【问题讨论】:
-
imap_fetchbody($inbox, $number, 2);为我工作
我只想从 imap_body 结果中提取 HTML 内容。 imap_body 给出邮件的逐字副本。
【问题讨论】:
imap_fetchbody($inbox, $number, 2); 为我工作
我找到了解决办法:
function getBody($uid, $imap)
{
$body = $this->get_part($imap, $uid, "TEXT/HTML");
// if HTML body is empty, try getting text body
if ($body == "") {
$body = $this->get_part($imap, $uid, "TEXT/PLAIN");
}
return $body;
}
function get_part($imap, $uid, $mimetype, $structure = false, $partNumber = false)
{
if (!$structure) {
$structure = imap_fetchstructure($imap, $uid, FT_UID);
}
if ($structure) {
if ($mimetype == $this->get_mime_type($structure)) {
if (!$partNumber) {
$partNumber = 1;
}
$text = imap_fetchbody($imap, $uid, $partNumber, FT_UID);
switch ($structure->encoding) {
case 3:
return imap_base64($text);
case 4:
return imap_qprint($text);
default:
return $text;
}
}
// multipart
if ($structure->type == 1) {
foreach ($structure->parts as $index => $subStruct) {
$prefix = "";
if ($partNumber) {
$prefix = $partNumber . ".";
}
$data = $this->get_part($imap, $uid, $mimetype, $subStruct, $prefix . ($index + 1));
if ($data) {
return $data;
}
}
}
}
return false;
}
function get_mime_type($structure)
{
$primaryMimetype = ["TEXT", "MULTIPART", "MESSAGE", "APPLICATION", "AUDIO", "IMAGE", "VIDEO", "OTHER"];
if ($structure->subtype) {
return $primaryMimetype[(int)$structure->type] . "/" . $structure->subtype;
}
return "TEXT/PLAIN";
}
【讨论】:
http://php.net/manual/en/function.imap-fetchbody.php
参数3,“节”如下:
部件号。它是由句点分隔的整数字符串,根据 IMAP4 规范索引到正文部分列表中
(empty) - Entire message
0 - Message header
1 - MULTIPART/ALTERNATIVE
1.1 - TEXT/PLAIN
1.2 - TEXT/HTML
2 - file.ext
因此,要获取邮件的 HTML 部分,您必须使用 1.2 选项作为第三个参数。像这样:
$message = imap_fetchbody($inbox, $number, 1.2);
【讨论】:
imap_fetchbody($inbox, $number, 2); 为我工作
我没有足够的声誉来添加评论,但我只是想在@GunniH 的回答中澄清您对该函数的调用应该如下所示:
$message = imap_fetchbody($inbox, $number, '1.2');
而不是这个
$message = imap_fetchbody($inbox, $number, 1.2);
最后一个参数应该是string,而不是int。
【讨论】:
imap_fetchbody($inbox, $number, 2); 为我工作