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);
- ?>
コメント