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