結論から言うとメールのデコードは上手くできた。
デコードに際して2つのPEARファイルが必要になることは既に書いたが、.qmailからプログラムを呼び出したり、なんだかんだの関係で、それぞれを個々にメインファイルから呼び出すことにした(mimeDecode.phpのrequire_once文をコメントアウトした)。
以下が実際に記述したプログラム。
———————————————————–
<?php
require_once(‘./lib/PEAR.php’);
require_once(‘./lib/mimeDecode.php’);
//標準入力からメール本体を抽出
$source=”;
$stdin=@fopen("php://stdin","r");
while(!feof($stdin)){
$source.=fgets($stdin,4096);
}
fclose($stdin);
//メールをパースする
$decoder = new Mail_mimeDecode($source);
$params[‘include_bodies’] = true; //ボディを解析する
$params[‘decode_bodies’] = true; //ボディをコード変換する
$params[‘decode_headers’] = true; //ヘッダをコード変換する
$structure = $decoder->decode($params);
?>
ここで$structureは構造体(オブジェクト)として返される(といってもまぁ配列のようにも扱えるわけだが)。このオブジェクトからは以下の値をもっている。
$structure->headers
ヘッダ情報(配列で格納されている)
$structure->ctype_primary
メールのコンテントタイプ(スラッシュより前)
$structure->ctype_secondary
メールのコンテントタイプ(スラッシュより後)
$structure->body
メールのコンテントタイプがmultipartでない場合のメール本体
$structure->parts
メールのコンテントタイプがmultipartな場合のメール本体(構造体)
outlookなんかだとmultipart×multipartみたいな書式のメールになることがあるので、メール本体の処理を忠実におこなおうとすると再帰的処理をかけてやる必要がある。今回はoutlook無視なので、そこまではやらないつもりだけど。