用imap在php中阅读的邮件

时间:2012-05-05 13:13:07

标签: php email imap

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

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

但原始邮件和输出邮件之间存在差异

原邮件:

  

纯文本

     

这是要检查的测试邮件

     

第一个第二个第三个第四个第五个第六个家

     

这是黄色背景

     

网站:http://bizved.com

     

测试报价

     

谢谢Hiren Manek Bhuved Solutions

输出邮件

  

纯文本

     

这是要检查的测试邮件

     

第一个第二个第三个第四个第五个第六个家

     

这是黄色背景

     

网址:http://bizved.com

     

测试 quote

     

谢谢 HirenManek Bhuved Solutions

任何人都可以提供解决方案吗? 提前谢谢。

2 个答案:

答案 0 :(得分: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));
}

答案 1 :(得分: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);

这不是完整的解决方案。它仅适用于字符编码。 Mail对于纯文本,html文本,附件等具有不同的部分,因为每种类型都应该有不同的处理方式。