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の場合、メッセージを正しくデコードするにはどうすればよいですか?