使用imap在php中读取邮件

使用imap在php中读取邮件,php,email,imap,Php,Email,Imap,我用php和imap_fetchbody阅读了这封邮件,并用imap_qprint对其进行了解码 $body = imap_fetchbody($mbox, $no, 1); $body = imap_qprint($body); 但原始邮件和输出邮件之间存在差异 原件: 纯文本 这是一封要检查的测试邮件 第一第二第三第四第五第六家 这是黄色背景 网站: 报价测试 感谢Hiren Manek Bhuved Solutions 输出邮件 纯文本 这是一封要检查的测试邮件 第一第二第三第四第五第六

我用php和imap_fetchbody阅读了这封邮件,并用imap_qprint对其进行了解码

$body = imap_fetchbody($mbox, $no, 1);
$body = imap_qprint($body);
但原始邮件和输出邮件之间存在差异

原件:

纯文本

这是一封要检查的测试邮件

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

这是黄色背景

网站:

报价测试

感谢Hiren Manek Bhuved Solutions

输出邮件

纯文本

这是一封要检查的测试邮件

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

这是黄色背景

网站:�http://bizved.com

测试�引述

多谢各位�Hiren Manek Bhuved解决方案

有人能给出解决方案吗?
提前谢谢。

我在使用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));
}

我已经将下面的解决方案作为邮件标题设置为其字符集

$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文本、附件等有不同的部分。因此,对于每种类型,您应该有不同的处理方式。

在显示电子邮件时,您需要注意电子邮件的字符编码。谢谢hakre。我已经找到了解决这个问题的办法。我有字符编码错误尝试。管道或获取电子邮件,登录到MySQL,并保存附件。