受信したメールをDBに保存する際に特定のメールのみ文字化けが発生する
phpでメールを受信した際に、受信したメールから「差出人」「件名」「本文」を抽出してDBに保存する処理を作成しました。
テストして正常に動作することを確認したのですが、特定の差出人からメールのみ「本文」が文字化けして保存されてしまいます。メーラーソフトで見るぶんには文字化けは発生しないので、メールそのものには問題がないかと考えているのですが・・・
文字化けするメールの文字コードは「utf-8」なのですが、
「utf-8」のメールすべてが文字化けするのではなく、現状一部のメールのみ文字化けします。
文字化けするのはあくまで「本文」のみで「件名」は日本語であっても文字化けは発生しません。
文字化けする原因はどのようなことが考えられるでしょうか?
▼以下のようなコードを書いています。
// メールの処理開始
mb_language('ja');
mb_internal_encoding("utf-8");
// メール取得
if ( ($stdin=fopen("php://stdin",'r')) == true ){
while( !feof($stdin) ){
$line .= fgets($stdin,4096);
}
}
fclose($stdin);
// PEAR を使った処理
$decoder = & new Mail_mimeDecode( $line ); // MIMEを分解
$parts = $decoder->getSendArray();
list( $recipients, $headers, $body ) = $parts;
$subject = mb_decode_mimeheader( $headers['Subject'] ) ;
$from = mb_decode_mimeheader( $headers['From'] ) ;
$m_body = trim(mb_convert_encoding( $body, "UTF-8", 'ASCII, JIS, UTF-8, SJIS' ));
//以下DBに保存する処理
▼文字化けしたメールの一部です
=E2=96=BC=E9=80=A3=E7=B5=A1=E5=B8=8C=E6=9C=9B=
=E6=97=A5/=E6=99=82=E9=96=93=E5=B8=AF
=E2=96=BC=E8=BB=8A=E6=A4=
=9C=E6=BA=80=E4=BA=86=E6=97=A5
2018-10-17