我有以下功能:
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方法可以解决此问题?
答案 0 :(得分:1)
您必须检查正在处理的MIME部分的Content-Transfer-Encoding
标题(提示:它在IMAP的BODYSTRUCTURE
中可用)并自行解码。两种最常见的编码是quoted-printable
和base64
。有关详细信息,请参阅RFC 2045, chapter 6。
答案 1 :(得分:0)
您可以尝试使用imap_fetchbody函数的$ options参数。也许将旗帜FT_INTERNAL与utf8_encode结合使用:
$bodyText = utf8_encode(imap_fetchbody($this->imap,$i,1, FT_INTERNAL));
我希望它适合你!