如何使用带有 PHP 的 imap 获取电子邮件正文的特殊字符


How to get special characters of the body of an email using imap with PhP?

我正在使用带有php的imap来获取电子邮件的正文。

到目前为止,我已经编码了

,最后我没有得到特殊字符和奇怪的格式。例如,如果我给自己发一封电子邮件(使用常规电子邮件客户端,如Apple Mail),上面写着:

用字符 é à 和一些 ! 那块石头进行测试。

我用 php 得到的是:

用字符 =C3=

A9 =C3=A0 和一些 ! 那块石头测试。=

我已经尝试使用这些标头通过 php 的邮件功能重新发送正文,但我仍然遇到同样的问题。

$headers="From: address@email.com" . "'r'n" . "MIME-Version: 1.0" . "'r'n" . "Content-type:text/html;charset=UTF-8";
mail($sendTo, $message, $noBody, $headers);

我试过addslashes(),这也无济于事。

我的代码示例在这里:

$imapLink=imap_open("{".$mailbox."}INBOX",$username,$password);
$mailBoxInfos = imap_check($imapLink);
$mailList = imap_fetch_overview($imapLink,"1:".$mailBoxInfos->Nmsgs);
if(isset($mailList))
{
    $numMess = imap_num_msg($imapLink);
    while($numMess>0) {
        $message = imap_body($imapLink, $numMess);
        $numMess --;
    }
}
$imapClose = imap_close($imapLink);

希望你能帮到我!

提前感谢!

亚瑟

您在

文本中看到的=XX称为"引用可打印内容"。它用于显示不能以 7 位显示的字符。

您可以使用 quoted_printable_decode() 将其转换回可读字符串。

所以这应该有效:

$message = imap_body($imapLink, $numMess);
$message = quoted_printable_decode($message); // <-- add this line
$numMess --;