人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

[php]Gmailから送信されたメールの本文が取得できません。

メールを受け取って諸々処理するphpプログラムを作成しています。
PEARのMail_mimeDecodeを使用して、標準入力からメールの内容を取得しているのですが、Gmailからのメールの場合だけメールの本文を取得することが出来ません。
(ThunderbirdやiPhoneのメールからは問題なく取得出来る)

■ソース(一部抜粋)
============================
require_once 'Mail.php';
require_once 'Mail/mimeDecode.php';

$params['include_bodies'] = true;
$params['decode_bodies'] = true;
$params['decode_headers'] = true;
$params['input'] = file_get_contents("php://stdin");
$params['crlf'] = "\r\n";
$structure = Mail_mimeDecode::decode($params);

//これの値が取れない(値が入っていない?)。
$mail_body = $structure->body;
============================

これの原因や解決方法をご存知でしたら、教えて頂けませんでしょうか?
Gmailからのメールのヘッダがおかしいとか、そういうことでしょうか?
(ヘッダと本文の間に2か所空白行があったりするのが気になるのですが…)

●質問者: sheepsace
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
ベストアンサー

(ヘッダと本文の間に2か所空白行があったりするのが気になるのですが…)

こんな感じになってるということでしょうか?

Subject: ...
...
Content-Type: multipart/alternative; boundary=わけの分からない英数字
これがひとつ目の空白行で...
--わけの分からない英数字
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit
ここを、ふたつ目の空白行、と言ってる?
本文...


もし、そうだったらマルチパートで送られてきてるんです。
添付ファイルがついてたり、HTML 形式のメールだったり。

こんなところが、参考になると思います。

で、multipartの場合は単純に$structure->bodyでは本文は取得できません。
実際に添付ありのメールをvar_dumpすればわかりますが、本文部分は$structure->partsで取得します。
parts部分はさらにstructureオブジェクトの配列になっています。
ですから、本文を取得するにはparts部分からbodyを取得します。

function getMultiPartBody($structure){
 foreach($structure->parts as $part){
 if("multipart" == strtolower(trim($structure->ctype_primary))){
 $body = getMultiPartBody($part); …?
 } elseif ("text" == $part->ctype_primary){
 $body = $part->body;
 break;
 }
 }
 return $body;
}

開発日記 » Blog Archive » PEAR::Mail_Mimeでメールを解析 ?DoCoMoの罠?

こっちも、同じことをやってる。
http://sakioka.sakura.ne.jp/note/?p=131


sheepsaceさんのコメント
マルチパートの形式だったのですね! 教えて頂いた参考サイトのやり方で無事取得出来ました。 本当にありがとうございましたー!
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ