phpでPEARを使わずに受信メールをデコード
php でメール内容を取得しようと思うと PEAR利用が一般的だが、ヘッダのみをフィルタにかけたり、テキストメールだけを処理したい場合の簡単デコード
- マルチパートには対応してません
- エンコードは、ISO-2022-JP(SJIS)とUTF-8メールのみ(必要なら追記して)
<?php // データ取得 $data = file_get_contents('example.eml'); // ファイルから // $data = file_get_contents("php://stdin"); // 標準入力から // ヘッダと本文を分離(空行で) if( ($i = strpos($data, "\n\n")) !== false ){ $header = substr($data, 0, $i); $body = substr($data, $i + 2); }else{ $header = $data; $body = ''; } // ヘッダデコード if( ($headerArray = iconv_mime_decode_headers($header)) !== false ){ print_r($headerArray); } // 本文デコード if( array_key_exists('Content-Type', $headerArray) && (strpos(strtolower($headerArray['Content-Type']), 'iso-2022-jp') !== false) ){ $body = mb_convert_encoding($body, 'SJIS', 'ISO-2022-JP'); $body = mb_convert_encoding($body, 'UTF-8', 'SJIS'); } print_r($body); ?>
コメント