1

我已经用 imap_fetchbody() 阅读了 php 中的邮件,并用 imap_qprint() 对其进行了解码。

$body = imap_fetchbody($mbox, $no, 1);
$body = imap_qprint($body);

但是原始邮件和输出邮件之间是有区别的

原邮件:

纯文本

这是要检查的测试邮件

第一 第二 第三 第四 第五 第六 主页

这是黄色背景

网站:http ://bizved.com

报价测试

谢谢 Hiren Manek Bhuved 解决方案

输出邮件

纯文本

这是要检查的测试邮件

第一 第二 第三 第四 第五 第六 主页

这是黄色背景

网站:�http://bizved.com

报价测试

谢谢 �Hiren Manek Bhuved Solutions

有人可以给出解决方案吗?提前致谢。

4

2 回答 2

0

我已经制定了以下解决方案,因为邮件标头已经是其字符集。

$st = imap_fetchstructure($mbox, $no); 
$part = $st->parts[$partno];
$body = imap_fetchbody($mbox, $no, $partno);
$body = imap_qprint($body);
$charset = 'UTF-8';
if(!empty($part->parameters)){
    for ($k = 0, $l = count($part->parameters); $k < $l; $k++) {
        $attribute = $part->parameters[$k];
        if($attribute->attribute == 'CHARSET'){
            $charset = $attribute->value;
        }
    }
}
//echo $charset;
$bodytext = mb_convert_encoding($body,'UTF-8',$charset);

这不是完整的解决方案。它仅用于字符编码。邮件对于纯文本、html 文本、附件等有不同的部分,因此您应该对每种类型进行不同的处理。

于 2012-05-15T12:05:34.860 回答
0

我总是对 imaps 有同样的问题。我不保证任何事情,但您可能想尝试一下:

function utf8_imap_header_decode($str)
{
    $tmp = imap_mime_header_decode($str);
    if (!mb_check_encoding($tmp[0]->text, 'UTF-8'))
        return utf8_encode($tmp[0]->text);

    return $tmp[0]->text;
}

function utf8_imap_body_decode($str)
{
    return utf8_encode(quoted_printable_decode($str));
}
于 2012-05-05T13:22:24.230 回答