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);

?>

コメント