phpでPEARを使わずに受信メールをデコード

php でメール内容を取得しようと思うと PEAR利用が一般的だが、ヘッダのみをフィルタにかけたり、テキストメールだけを処理したい場合の簡単デコード
  • マルチパートには対応してません
  • エンコードは、ISO-2022-JP(SJIS)とUTF-8メールのみ(必要なら追記して)
  1. <?php  
  2.   
  3. // データ取得  
  4. $data = file_get_contents('example.eml'); // ファイルから  
  5. // $data = file_get_contents("php://stdin"); // 標準入力から  
  6.   
  7. // ヘッダと本文を分離(空行で)  
  8. if( ($i = strpos($data"\n\n")) !== false ){   
  9.  $header = substr($data, 0, $i);  
  10.  $body = substr($data$i + 2);  
  11. }else{  
  12.  $header = $data;  
  13.  $body = '';  
  14. }  
  15.   
  16. // ヘッダデコード  
  17. if( ($headerArray = iconv_mime_decode_headers($header)) !== false ){  
  18.   print_r($headerArray);  
  19. }  
  20.   
  21. // 本文デコード  
  22. ifarray_key_exists('Content-Type'$headerArray) && (strpos(strtolower($headerArray['Content-Type']), 'iso-2022-jp') !== false) ){  
  23.  $body = mb_convert_encoding($body'SJIS''ISO-2022-JP');  
  24.  $body = mb_convert_encoding($body'UTF-8''SJIS');  
  25. }  
  26. print_r($body);  
  27.   
  28. ?>  

コメント