レンタルサーバにPEARをインストールし、
mimeDecode.phpを使って、メールを解析したいのですが、
上手くいきません。
下記のサイトを参考にしましたが、やはりできませんでした。
http://d.hatena.ne.jp/makotoworld/20071106/11943 …
http://www.abe-tatsuya.com/web_prog/php/mail2php …
メールを分解するファイル(.php)では、
file_get_contents("php://stdin")のようなカタチで、
メール情報はキャッチできています(確認済みです)が、
それを、
$params['include_bodies'] = true;
$params['decode_bodies'] = true;
$params['decode_headers'] = true;
$params['input'] = file_get_contents("php://stdin"); // 標準入力
$params['crlf'] = "\r\n";
$mail_data = Mail_mimeDecode::decode($params);
#-- 本文の取得
$MailBody = $mail_data->body;
$MailBody = mb_convert_encoding($MailBody,"UTF-8","JIS");
としても、取り出せないのです。
(つまり、$MailBody は空っぽのままなのです。)
さらに、
#-- From フィールドの取得
$FromAddress = $mail_data->headers['from'];
#-- To フィールドの取得
$ToAddress = $mail_data->headers['to'];
としている部分では、error_reportingが、
Notice: Undefined index: from in~~
Notice: Undefined index: to in~~
と、エラーを吐いています。
これも謎です…。一体、どういうことになっているんでしょうね?!汗
・パスの書き方に誤りがあり、
正常にPEARにアクセス(利用)できていない?
・そもそも、インストールが怪しい?
・上記の、参考にした2サイトでは、
mimeDecode.phpの扱い方が違うのですが、この違いとは?
これは、PEARのバージョンの新旧の問題?
だとすると、今となっては、
どちらか一方しか使えない、もしくは、両方とも使えない?
つまり、サイトを参考にして書いたコードがそもそも古くて使い物にならない?
・ファイルのパーミッションの問題?(保存形式はEUCとしています)
以上の点が、気になっています。
この事態を打開するためには、どう切り分けながら改善していったらよろしいでしょうか。
どなたかお詳しい方、どうか教えて下さい。
なお、
FFFTPにより、PEARのファイル群が置かれていることは確認しています。
(mimeDecode.phpもあります。)
コードの冒頭は、
#!/usr/local/bin/php
<?php
error_reporting(E_ALL);
としています。
レンタルサーバは、さくらインターネットのスタンダードプランです。
PHPバージョンは、5.2.14。
PEARは、最近、http://pear.php.net/go-pear経由でインストールしました。
長くなりましたが、宜しくお願い致します。
No.2ベストアンサー
- 回答日時:
そういえばお久しぶりでしたね。
とりあえず、
file_get_contents("php://stdin");
が、取得できているのであれば、
メール取得部のプログラムを、
<?php
$log = file_get_contents('php://stdin');
file_put_contents('log_'.time().'.txt', $log);
?>
とか、適当にメールを書き出す処理だけかけておいて、
ローカルなど適当な環境で、そのファイルをデコード処理するプログラムを書いてチェックしてみてはどうでしょう。
基本的にパーサとかといったものは、泥臭いコードが書かれていたりするので、単純に受信した形式のメールだと
処理不能となって、こけている可能性があります。
いくつかのメーラ、自宅のPCのメーラーや、GmailなどWebメールとかなど、いくつかのクライアントで試したりしてみると
良いかもしれませんね。
また、mimeDecodeに既知のバグがないかを調べてみるのも良いかもしれません。
回答ありがとうございます。
>そういえばお久しぶりでしたね。
当時、私はホゲホゲさんにかなりご迷惑をお掛けしていたと思っていましたので、、
要注意人物として記憶されているかと思っていましたが、
実際には、そうでもなかったみたいですね。笑
嬉しいような寂しいような。笑
さて、このメールデコードプログラムmimeDecodeについてですが、
ホゲホゲさんのお話から、万能というわけではないんだな、ということが分かりました。
どんなメールに対しても、器用にメール情報を分解し、
本文の抽出などを手軽に行えるものと過信していました。
実際には、
送るメールの種類によって、パースできたりできなかったりするような類のプログラムだったようで、
このことに対しては、PEARを万能と思いこんでいた私には驚きでした。
コードの中身は実は泥臭いということを知りましたので、
であれば、自作する道を選びますw
というか、今回の場合、自作した方が早いケースだったので、
最初からしておけば良かったなと後悔していますw
実際には、もう9割方、完成しちゃっているのですが…。
>mimeDecodeに既知のバグがないかを調べてみるのも良いかも
いやぁ、そんな意欲は、ありませぬ。苦笑
今回も、どうもありがとうございました。
自作によるメールパーサにつまづきましたら、
先ほど教わりました POP-Qdreciever なるものに手を出してみたいと思います。
もうPEARはこりごりです。苦笑
No.1
- 回答日時:
■取得できない件
ソース確認してみましたが、
$mail_data変数に格納されるものは、普通のstdClassです。
一度var_dumpしてみて中に情報含まれるのか確認してみてください。
また、どうもそもそも不正な値が含まれていたりした場合、エラーメッセージ等でないでスルーするような挙動をするっぽいので
一度実際にmimeDecode.phpの中身確認して、必要であればライブラリにprint等書きこんで動きをチェックとかしたほうが早いかもしれません。
■decodeメソッドの呼び出し方に関して
Mail_mimeDecodeのdecodeメソッド呼び出しは、静的に呼び出しても、インスタンスつくってから呼び出しても同じ結果が返ります。
静的に呼び出せばデコード後のインスタンスをunsetする手間を省けるので楽っていう所ではないでしょうか。
■その他
http://hal456.net/
こちらの、POP-Qdrecieverを使ったほうが楽出来るかもしれません。
お久しぶりです、hogehogeさん。
またお話しできて嬉しいです。
さて、「一度var_dumpしてみて中に情報含まれるのか確認」の件ですが、
var_dump($mail_data)の値を確認するのは、実はちょっと面倒だったりします。
なぜなら、
file_get_contents("php://stdin"); は、ご存知の通り、
メールを送ってみることで生成されるデータだからです。
で、メールを送ってみて、その後、
どうやってvar_dump($mail_data)の値を確認したら良いか、
を考え、
$mail_content = var_dump($mail_data);として、
$mail_contentの値を、自分のメールアドレスに送って、
そのメール本文から値を確認しようかとも思ったのですが、
なぜかはわかりませんが、
var_dump();の値は、メールでは確認できなかったため、
それでは!ということで、
file_get_contents("php://stdin"); をせずに、
file_get_contents("php://stdin"); で受け取るはずの値(ここでは、例として、'hogehoge~~~')を、
コピペして、それを
$mail_get_contents = 'hogehoge~~~';
として手動コピペし、
その値に対し、
echo var_dump($mail_get_contents);
として、web上で確認してみました。
で、その結果が、
object(stdClass)#2 (4) { ["headers"]=> array(0) { } ["ctype_primary"]=> string(4) "text" ["ctype_secondary"]=> string(5) "plain" ["body"]=> string(0) "" }
となります。
>エラーメッセージ等でないでスルーするような挙動をするっぽい
これでは、デバグしづらいですよね…。汗
>一度実際にmimeDecode.phpの中身確認して、必要であればライブラリにprint等書きこんで動きをチェックとかしたほうが早いかも
なんだか繁雑な作業になりそうですね。
それならばいっそのこと、自分で正規表現で抽出した方が早そうです。苦笑
手早く、容易に使えるだろうとのことでPEARに手を出したというのに、
これでは本末転倒ですw
>POP-Qdrecieverを使ったほうが楽出来るかも
こちら、ちょっと調べてみますね。
相変わらず、分かりやすく、為になる回答をありがとうございます。
また何か分かることがありましたら、教えて下さい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別ファイルの変数を呼び出した...
-
fputcsvで保存せず、そのまま出...
-
PHP⇒MySQL CSVファイルのアッ...
-
mysqlの自動バックアップ
-
phpinfo.phpを開くとファイルの...
-
#!/usr/local/bin/phpはどこに...
-
PHPファイルの中身が見られるこ...
-
session_start()でwarningが表...
-
拡張子php画像をjpg画像等に変...
-
PHPで新しいウインドウで開く命...
-
onedrive にexcelファイルをア...
-
JSPにてMySQLのBLOB型の画像の...
-
データベースへの持続的接続
-
youtubeに音声のみのmp4ファイ...
-
PHPの実行ログ??書き込み失敗
-
手作業で埋め込んだ、UserForm1...
-
ファイルの行数取得
-
php と JavaScript(HTML??)
-
これは例外処理でしょうか?
-
PHPでのindex.htmlの生成ができ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別ファイルの変数を呼び出した...
-
include先でのinclude元の変数...
-
別PHPファイルに変数を渡す
-
シェルスクリプトからphpファイ...
-
phpinfo.phpを開くとファイルの...
-
phpの開始タグ及び終了タグ外で...
-
パスワード等が記述されているp...
-
phpのプログラムエラー
-
拡張子なしのファイルを稼働さ...
-
a href リンクタグでだけで 送...
-
1行目の#! "C:\\xampp\\php\\p...
-
codeigniterでcron実行したい
-
PHP(.php)及びJavascrpit(.j...
-
こちらはただの直列処理ですか?
-
phpのソースコードが、そのまま...
-
リクエストURIによってHTML表示...
-
PEARのmimeDecodeでメール解析...
-
入力フォームの空白や改行を制...
-
拡張子php画像をbmp画像等に変...
-
#!/usr/local/bin/phpはどこに...
おすすめ情報