我正在使用 PHP 中内置的 imap 扩展从 imap 电子邮件中读取消息并解析出消息并将其添加到另一个系统的数据库中。
问题是消息是经过编码的。所以我必须先对其进行解码,然后将其添加到数据库中。
我可以使用 imap_fetchstructure()来找出使用哪种编码类型编码的消息,并且我应该能够从中解码它。
所以这就是我所做的
$struct = imap_fetchstructure($this->conn, $id, 0);
if(isset($struct->encoding)){
$message = $this->_decodeMessage($message, $struct->encoding);
}
private function _decodeMessage($msg, $type){
if($type == 0){
return mb_convert_encoding($msg, "UTF-8", "auto");
} elseif($type == 1){
return imap_8bit($msg); //imap_utf8
} elseif($type == 2){
return imap_base64(imap_binary($msg));
} elseif($type == 3){
return imap_base64($msg);
} elseif($type == 4){
return imap_qprint($msg);
//return quoted_printable_decode($msg);
} else {
return $msg;
}
}
我遇到的问题是一些用 7BIT 编码的消息没有被正确解码,当我打印时我仍然看到加密的消息$message
当消息的类型为 7BIT 时,如何正确解码消息?