メールをトリガーにしたPHPの起動。
2009年05月09日
注文時のデータを取り込む必要が出たので。
メールをトリガーにPHPを起動して、メールに記載されているデータをMySQLにインサートするプログラムを作りました。
すんなりCSVか何かで吐き出してくれればいいのですが、その手続きが大分面倒で。
でも、まぁ、これをきっかけに勉強にはなったからいいかなと。
参考にしたのは以下のサイト。
結構すんなりと書けました。
メールを取り込む際のソースは以下。
require('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";
$mail=Mail_mimeDecode::decode($params);
で、$mailにオブジェクトで、メールの各種情報が取得されます。
ヘッダーは、$mail->headersに配列で。
本文は、$mail->bodyにstringで。
ただ、文字コードはiso-2022-jpなんで。
UTF-8で書いてるので、文字コードの変更が必要。
mb_convert_encoding($mail->body,'UTF-8','JIS');
注意点としては、ヘッダーの$mail->headersの配列のキーが、すべて小文字だったこと。
最初取得できなくて、少しハマりました。
$mail->headers['from']
$mail->headers['subject']
また、毎度大変だなと思う。
正規表現での文字列の操作ですが。
最初、以下のように書いてて、文字列が取得できないなと。
preg_replace('/^正規表現/m',$mail->body,$text);
そりゃそうですよね。replaceしてるもん。
正しくはこう。
preg_match('/^正規表現/m',$mail->body,$text);
で、また少しハマって。
preg_matchで取得する場合は、配列でやってくる。
なんで、上記の場合は、$text[0]にstringが入ると。
それまで、チンプンカンプンの世界で。
3年ほど前からPHPをいじり始めて、まだまだ半人前ですが。
プログラムのクリエイティブさと、奥深さに気づきました。
HTML・CSSのみのWEBよりも、プログラミングを交えたWEBの方が色々なことができて広がりが出ます。
ただ、それに脳がついていかず、やる毎にドンドン忘れていくのが最近の悩みで、毎度訂正する際に思い出すのが大変。
それを備忘するためにも、ブログを始めました。
追記で、PHPのエラーレベルをE_STRICTも表示するようにしているのですが。
pearのパッケージで、STRICTエラーが表示されることがあるので、この辺もケアしてくれたなと。
ただ、pear・PECLのパッケージには、いつもお世話になっていて。
色々なことが簡単にできて、偉大だと思う。

