[PHP-users 4423] Re: メール機能との連動でデータベース更新

Youichi Iwakiri php-users@php.gr.jp
Sat, 22 Dec 2001 23:16:25 +0900


いわきりです

Takeo Shibata wrote in <003901c18ae6$50746100$0e94fea9@home>:
 >4.メールを受信した段階でメールの送信元と確認番号を読んで
 >PostgreSQLの仮登録のレコードをアップデートする
 >しくみをつくりたいのですが
 >この4のとこでなやんでます

sendmail, qmail等のSMTPサーバは受信したメールを各ユーザの
メールスプールに追加するだけでは無く、指定によっては
プログラムに渡す仕組みを持っています。

特定アカウントに来るメールを全て何らかのプログラムに渡したければ
/etc/aliasesにエントリを追加します。
#メーリングリストの作成/運用を行ったことがあれば解るでしょうけども

例 ml-name-ctl@hoge.ne.jp宛の場合

ml-name-ctl: "| /home/hoge/regist.php"

また、通常のメールと制御用のメールが同一のメールアドレスに来る場合は
.forward等で制御できます。
私はsendmail+MHでメーリングリストから送られてくるメールをDBに登録する
処理をPHPで書いてます。

$HOME/.forwardに
 "| /usr/local/lib/mh/slocal -user iwakiri"

$HOME/.maildeliberyに
 X-Sequence pgsql-jp  A "| /home/iwakiri/ml_maint/regist.php pgsql"
 List-Id    PHP-users A "| /home/iwakiri/ml_maint/regist.php php_users"
として特定のヘッダ情報を持つものだけ処理対象としています。

 >ある資料で
 >imap_header関数その配列のあたいをとってくれば
 >メールアドレスはとれそうですが
 >管理画面からとらなくてはいけません
 >これを受信したと同時にできないでしょうか
 >もちろんサーバーの受信アドレスはとういつしてですが
 >メール到着とともに
 >メール送信もと、メール本文を確認して
 >処理するプログラムPHPを動かす
 >(このイベントをメール受信と同時に発生させたいのですが)
 >できなければ5分おきににうごかす。
 >メールをあけて、送信元メールアドレスを確認、本文確認
 >あってればDB更新、そしてメール削除)
 >このPHP機能を数分間隔で繰り返し実行(この機能でなやんでます)

まぁ、IMAP,POP3関数はメールボックスに既に有るものを読みに
行く場合に有効なものですが、メールの受信を契機にPHPスクリプトを
動かす処理には向いていないと思います。

私が愛用しているものですが、pearの配下に
 pear/mail/MimeDecode.php 
が有ります。ファイルまたは標準入力から受け取るデータをメールと
みなし、ヘッダ、ボディーパートの分割だけでなく名前の通りMIMEに
対応しています。
これを使えばお望みの機能を実現できるとおもいますよ。

 >マニュアルには記述されてなかったです)

pear関係は英文もほとんど無いですからねぇ (^^;