PHP PEAR :: Mail_MimeDecodeで添付ファイル(*.eml)付きのメール受信

Pocket

 PEAR :: Mail_MimeDecodeでメール受信をする際、添付ファイル(*.eml)の読み取りで手間取ったのでメモ。

 まずは普通のメール受信のパターン。

スポンサードリンク



#!/usr/local/bin/php -q
<?php
require_once 'Mail/mimeDecode.php';

// 返される構造体にbody(本文)を含めるどうか。
$params['include_bodies'] = true;
// 返されるbodyをデコードするかどうか。
$params['decode_bodies']  = true;
// ヘッダをデコードするかどうか。
$params['decode_headers'] = true;

// 標準入力からメールを読み込み(.forwardでリレー受信)
$params['input'] = file_get_contents("php://stdin"); 
// 行末を指定する。
$params['crlf'] = "\r\n";

// 上記の設定を用いてインスタンス生成
$mail_data = Mail_mimeDecode::decode($params);

// fromアドレス取得
$FromAddress = $mail_data->headers['from'];

// toアドレス取得
$ToAddress = $mail_data->headers['to'];

// 件名取得
$Subject = $mail_data->headers['subject'];
$Subject = mb_convert_encoding($Subject,"UTF-8","JIS");

// 本文取得
$MailBody = $mail_data->body;
$MailBody = mb_convert_encoding($MailBody,"UTF-8","JIS");

?>

 で、はまったのは*.eml形式(message/rfc822)の添付ファイルを受信した時に、そのemlファイルを本文として読み込む方法。
 試行錯誤の末に以下のようになりました。

 本当はもうちょっと丁寧に書くべきなんだろうけど、今回は用途が限定されているので(送られてくる添付ファイルはeml形式のみなので)下記で十分だった。

// 添付ファイルがあったら内容を表示
if( strtolower($mail_data->ctype_primary) === "multipart"){
        foreach($mail_data->parts as $part){
                switch( strtolower( $part->ctype_primary)){
                        case "text":
                                $MailBody .= $part->body;
                                break;

// message/rfc822(eml形式) case "message": foreach( $part->parts as $part2){ $MailBody .= $part2->body; } break;

} } }


 まぁなんでeml形式の添付ファイルを扱うハメになったかというと、Thunderbirdのフィルタ機能を用いて転送すると強制的に添付ファイル扱いになっちゃうんですよねぇ。

 今回はThunderbirdのフィルタに合致したメールのみを処理対象にしたかったので、こういう形になりました。

 以上。

お役に立てましたか?

ブックマークをどうぞ!

スポンサード リンク

“PHP PEAR :: Mail_MimeDecodeで添付ファイル(*.eml)付きのメール受信” への 1 件のフィードバック

コメントを残す