imap bodytext格式问题

时间:2014-03-06 23:35:04

标签: php imap

我有以下功能:

public function getMails()
{
    $mails = array();
    $numMessages = imap_num_msg($this->imap);
    for ($i = 1; $i <= $numMessages; $i++)
    {
        $header = imap_header($this->imap, $i);

        $fromInfo = $header->from[0];
        $replyInfo = $header->reply_to[0];

        $details = array(
            "fromAddr" => (isset($fromInfo->mailbox) && isset($fromInfo->host))
                ? $fromInfo->mailbox . "@" . $fromInfo->host : "",
            "fromName" => (isset($fromInfo->personal))
                ? $fromInfo->personal : "",
            "replyAddr" => (isset($replyInfo->mailbox) && isset($replyInfo->host))
                ? $replyInfo->mailbox . "@" . $replyInfo->host : "",
            "replyName" => (isset($replyInfo->personal))
                ? $replyInfo->personal : "",
            "subject" => (isset($header->subject))
                ? $header->subject : "",
            "udate" => (isset($header->udate))
                ? $header->udate : ""
        );

        $bodyText = imap_fetchbody($this->imap,$i,1.2);
        if(!strlen($bodyText)>0){
            $bodyText = imap_fetchbody($this->imap,$i,1);
        }
        $details['body'] = $bodyText;

        $uid = imap_uid($this->imap, $i);
        $current_mail = array('header'=>$header, 'from'=>$fromInfo, 'reply'=>$replyInfo, 'details'=>$details);

        $mails[$i] = $current_mail;
    } 
}

然而正文有问题。

这是我发送电子邮件的测试邮件,如下所示:

Hello world

Med venlig hilsen

Marc Rasmussen

Besøg mig på MarcRasmussen.dk                     

然而,当从imap:

中取出时,正文文本看起来像这样
    Hello world=0A=
=0A=
Med venlig hilsen=0A=
=0A=
Marc Rasmussen=0A=
=0A=
Bes=F8g mig p=E5 MarcRasmussen.dk                     =

PHP中是否有任何buildin方法可以解决此问题?

2 个答案:

答案 0 :(得分:1)

您必须检查正在处理的MIME部分的Content-Transfer-Encoding标题(提示:它在IMAP的BODYSTRUCTURE中可用)并自行解码。两种最常见的编码是quoted-printablebase64。有关详细信息,请参阅RFC 2045, chapter 6


答案 1 :(得分:0)

您可以尝试使用imap_fetchbody函数的$ options参数。也许将旗帜FT_INTERNAL与utf8_encode结合使用:

$bodyText = utf8_encode(imap_fetchbody($this->imap,$i,1, FT_INTERNAL));

我希望它适合你!