メールのデコード
メール操作ネタの続き。
メールをデコードするにはPEARのMail/mimeDecodeを使う。
メール受信のトリガーから起動させる関係で、インクルードパスの設定等々が上手くいかないときは、元のファイルで直接必要なファイルをインストールするとして、以下のファイルが必要。
・PEAR.php
・Mail/mimeDecode.php
「Mail/mimeDecode.php」はMail_Mimeパッケージに含まれている。
これだけでデコードできるはず。あとでチェックしてみよう。
メールが届いたら、環境変数に送り主のメールアドレスなどをセットしてプログラムに引き渡すことができる、という点については昨日書いた。
しかし本文は引き渡せないので、どうしたものかと思案していたのだが、結局渡せることがわかった。いわゆる標準入出力を使う。これですべて解決。
まとめると以下のようになる。
(1) .qmailファイルでメールがついたらプログラムを起動するよう設定
| /usr/bin/php /hoge/hoge/hoge.php
(2) 引き渡されたプログラム内でメール本文を標準入力から読み取る
$body=”;
$stdin=@fopen(“php://stdin”,”r”);
while(!feof($stdin)){
$body.=fgets($stdin,4096);
}
(3) その他環境変数からいろいろ使用する。
$_ENV[‘SENDER’]とか。
うんうん。ちょっとしたアプリがかけそう。調べてよかった。
携帯などで「空メールを送ったら自動的にプログラムが起動して・・・」という機能を実装したくなった(「したくなった」という気分自体異常だけどね)。
使っているメールサーバはqmail。よって.qmailファイルでプログラムを起動するようにするとそれで事足りる。当然phpのプログラムをキックするわけだが、phpのプログラム中で便利に使える環境変数があるのでまとめておく。
$_ENV[‘SENDER’] 送信者アドレス
$_ENV[‘RECIPIENT’] 受信者アドレス
他にもいろいろ。詳しくはここ。
むむ。本文は環境変数に読み込まれないのかも。
最近まで知らなかった(単にソースを熟読していないだけなのだが)。
ActionChainは引数を渡すことができる。
registerする際に・・・。
$ac=new ActionChain();
$ac->register(‘登録名’,’モジュール名’,’アクション名’,array(‘引数名’=>’引数値’));
これだけでいい。
しかし・・・mojavi2って最近は使っている人いるのだろうか。
今はPHPフレームワークの過渡期。そろそろ新しいものにチャレンジする必要もありそう。Zendとかね。
アクセス数をカウントするプログラムを書いていて、わけのわからない症状がでた。
最初のアクセス時に、なぜかカウントがいきなり3になる。本来ならデータベースに新規レコードが追加されて、カウントが1にセットされるはずなのに・・・。しかし一旦データを削除して、もう一度同じURLにアクセスすると今度は1。なぜ?、なぜ??。
調べた結果、googleアドがちょっかいを出していることがわかった。googleアドは自分が呼び出されると、googleのサーバから当該URLにリクエストを出して、それによって表示内容を決定する(と思う)。
結局いきなり初期値が3になるのではなく、1でレコードが追加されたあと、googleが2つカウントアップしていたわけだ。
カウントアップのプログラムでUSER_AGENTをチェックすることで問題解決。これは久しぶりにはまってしまった。