PEARのMail_mimeDecodeについて | makochanのブログ

PEARのMail_mimeDecodeについて

メールを解析する時に使うと便利なのがPEARライブラリのMail_mimeDecodeです。


基本的な使い方を勉強しました。


標準入力から取得したメールデータは、生のメールデータです。これをMail_mimeDecodeを使って


解析して目的の情報を取得するわけです。


ちなみに生のメールデータとはこんなかんじです。


以下のコードで取得しました。


#!/usr/local/bin/php

<?php

require_once '/home/lets-enjoy/www/pear/PEAR/Mail/mimeDecode.php';


$filename="/home/lets-enjoy/www/mobile/s001/admin/tool/album/sample.txt";


//標準入力からメール内容を文字列で取得
$source=file_get_contents("php://stdin");


if(!$source){

exit;

}


$fp=fopen($filename,"a");

fwrite($fp,$source);

fclose($fp);



sample.txtにデータ吐き出されました。中身はこんなです。


以下の解説については「携帯メールのヘッダについて 」をご覧ください。



Return-Path: <xxxxx@docomo.ne.jp >
Received: from 9999.sakura.ne.jp (ksav22.sakura.ne.jp [000.000.000.000])
by www890.sakura.ne.jp (8.14.3/8.14.3) with ESMTP id nA67oOLF050848
for <support@####.sakura.ne.jp >; Fri, 6 Nov 2009 16:50:24 +0900 (JST)
(envelope-from xxxxx@docomo.ne.jp )
Received: from docomo.ne.jp (mail105.docomo.ne.jp [000.000.000.000])
by 9999.sakura.ne.jp (8.14.3/8.14.3) with ESMTP id nA67oMOc050840
for <support@####.sakura.ne.jp >; Fri, 6 Nov 2009 16:50:22 +0900 (JST)
(envelope-from xxxxx@docomo.ne.jp )
Date: Fri, 06 Nov 2009 16:50:21 +0900 (JST)
From: xxxxx@docomo.ne.jp
To: support@####.sakura.ne.jp
Subject: =?iso-2022-jp?B?GyRCJUYlOSVIGyhC?=
Message-ID: <IMTF0tpD1258f4350HhK@docomo.ne.jp >
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="Jd7ujnDJ"
Content-Transfer-Encoding: 7bit
X-Anti-Virus: K-Prox Anti-Virus Powered by Kaspersky, bases: 06112009 #2914457, status: clean

--Jd7ujnDJ
Content-Type: text/plain; charset="iso-2022-jp"
Content-Transfer-Encoding: 7bit

これはテストです
--Jd7ujnDJ
Content-Type: image/jpeg;
name="091104_161632.jpg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="091104_161632.jpg"

/9j/4QK6RXhpZgAASUkqAAgAAAAMAA4BAgAOAAAAngAAAA8BAgAHAAAArAAAABABAgAHAAAAtAAA
ABIBAwABAAAAAQAAABoBBQABAAAAvAAAABsBBQABAAAAxAAAACgBAwABAAAAAgAAADIBAgAUAAAA
zAAAABMCAwABAAAAAQAAAJiCAgACAAAAIAAAAGmHBAABAAAAAgEAAKXEBwAiAAAA4AAAAAAAAAAw
OTExMDRfMTYxNjMyAERvQ29NbwAAU0g5MDNpAABIAAAAAQAAAEgAAAABAAAAMjAwOToxMTowNCAx
NjoxNjo0OABQcmludElNADAzMDAAAAMAAQAUABQAAQEBAAAAEAGAAAAAGQCaggUAAQAAADQCAACd
ggUAAQAAADwCAAAAkAcABAAAADAyMjADkAIAFAAAAEQCAAAEkAIAFAAAAFgCAAABkQcABAAAAAEC
                  :



この生データを解析するがMail_mimeDecodeになります。


//$mailDataは生メールデータ


//インスタンス生成

$decoder=new Mail_mimeDecode($mailData);


//コンストラクタで引数を指定してメールを分解(構造体として返される)

$structure=$decoder->decode(array(


//返されるメール構造体にメール本体を含めるかどうかを指定

'include_bodies' => true,


//返されるメール構造体のメール本体をデコードするかどうかを指定

'decode_bodies' => true,


//ヘッダをデコードするかどうかを指定

'decode_headers' => true,

));


これら3つの引数にtrueを指定することで生メールデータがデコードされます。


取得したメール構造体では以下のようなコードをよく使います。


$structure->headers
 ヘッダ情報(配列で格納されている)


$structure->ctype_primary
 メールのコンテントタイプ(スラッシュより前)


$structure->ctype_secondary
 メールのコンテントタイプ(スラッシュより後)


$structure->body
 メールのコンテントタイプがmultipartでない場合のメール本体

$structure->parts

 メールのコンテントタイプがmultipartな場合のメール本体(構造体)




今、この2冊の本を参考にして勉強中です。私みたいな初心者の方、必見です。


PHP×携帯サイト デベロッパーズバイブル

PHP×携帯サイト 実践アプリケーション集




以上