MimeMailParserプログラムは
https://code.google.com/p/php-mime-mail-parser/source/browse/trunk/MimeMailParser.class.php
にある.このページのtrunkにある2つのphpファイルを入手する.
MacのXAMPPにはMailParserがはいってないので,手動でインストールする必要がある.
sudo /Applications/XAMPP/xamppfiles/bin/pear install pecl/mailparse
(注:20131220) 「echo $messageBody;」の部分は,
echo mb_convert_encoding($messageBody,"UTF-8","JIS") . "\n";のようコード変換する必要がある.
<?php // MimeMailParserの利用して,メールの主要ヘッダと本文を抽出 // 添付ファイルを指定フォルダに格納 include_once('MimeMailParser.class.php'); mb_internal_encoding("UTF-8"); // mimeデコードするときの,変換後の日本語コード $dir = "/home/toyoki/Maildir/.edu.OpenSys11/cur/"; //(ここは各自変更) 末尾のスラッシュは必須 // ファイル名一覧の取得 $filename = array(); if (is_dir($dir)) { if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { $filename[] = $file; } closedir($dh); } } $mailHandle = new MimeMailParser(); foreach($filename as $f) { // メールファイルを1通づつ処理 $mailHandle->setPath($dir . $f); // $header = $mailHandle->getHeaders(); // ヘッダーを配列としてゲット //print_r($header); // 試しにどんなヘッダーをゲットできるか調べる $from = $mailHandle->getHeader('from'); // ヘッダーの指定項目をゲット $to = $mailHandle->getHeader('to'); $subject = $mailHandle->getHeader('subject'); $subject = mb_decode_mimeheader($subject); $messageBody = $mailHandle->getMessageBody(); // メール本文をゲット // 添付ファイルの格納 storeAttachmentsは下で定義 // 格納するフォルダ名を $attchmentDirに指定 $attachmentDir = "attachment/"; storeAttachments($mailHandle, $attachmentDir); // 出力 echo "[To] " . $to . "\n"; echo "[From] " . $from . "\n"; echo "[Subject] " . $subject . "\n"; echo "--本文--\n"; echo mb_convert_encoding($messageBody,"UTF-8","JIS") . "\n"; //20131220修正 echo "---------------------------------------------\n"; } /************************************** * 引数: MimeMailParserオブジェクト * 指定されたオブジェクト内の添付ファイルを$dirに格納 **************************************/ function storeAttachments($mailHandle, $dir) { $attachmentObj = $mailHandle->getAttachments(); if($attachmentObj) { foreach($attachmentObj as $obj) { $filename = $dir . mb_decode_mimeheader($obj->filename); $handle = fopen($filename ,"w"); fwrite($handle, $obj->getContent()); fclose($handle); } } } ?>
include_once('MimeMailParser.class.php'); $mailHandle = new MimeMailParser(); //処理用オブジェクトを生成
$mailHandle->setPath($dir . $f);
$from = $mailHandle->getHeader('from'); // ヘッダーの指定項目をゲット $to = $mailHandle->getHeader('to'); $subject = $mailHandle->getHeader('subject'); $subject = mb_decode_mimeheader($subject);
その他の項目も指定できる.どんなヘッダーを取得出きるかは,
$header = $mailHandle->getHeaders(); // ヘッダーを配列としてゲット print_r($header); // 試しにどんなヘッダーをゲットできるか調べる
を行なって試してみる.
$messageBody = $mailHandle->getMessageBody(); // メール本文をゲット
/************************************** * 引数: MimeMailParserオブジェクト * 指定されたオブジェクト内の添付ファイルを$dirに格納 **************************************/ function storeAttachments($mailHandle, $dir) { $attachmentObj = $mailHandle->getAttachments(); if($attachmentObj) { foreach($attachmentObj as $obj) { $filename = $dir . mb_decode_mimeheader($obj->filename); $handle = fopen($filename ,"w"); fwrite($handle, $obj->getContent()); fclose($handle); } } }