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冊の本を参考にして勉強中です。私みたいな初心者の方、必見です。
以上