[PHP-users 1462] Re: CGI 版での標準入力からのパラメータの処理
HAYAKAWA Hiroshi
php-users@php.gr.jp
Thu, 23 Aug 2001 21:25:43 +0900
早川@名古屋と申します。
タカハシさん、はじめまして。
on 01.8.23 7:05 PM, Tsuyoshi Takahashi at mltun@ml.vip.co.jp wrote:
> [PHP-jp 7776] メール返信者の特定方法 のスレッドや方々調べて
>
> |/usr/local/php/error_mail.php
>
> といった内容のエラーメール用のaliasをつくりましたがその先がすすみません。
> MTAはqmailです。
> どうやって標準入力から送られてきたメールの内容をPHPで得ることが出来るのでしょ
> う
> か?
その道は浅いので内容の保証はできませんが、
僕は下記のコードで「生メール」を取得できています。
----------
// メールの本体(ヘッダも含む)
$rawmail="";
$fp=fopen("php://stdin", "r");
while(!feof($fp)){
$rawmail.=fread($fp, 4096);
}
fclose($fp);
// 文字コードの変換
$rawmail=i18n_convert($rawmail, "EUC-JP", "JIS");
----------
http://www.php.net/manual/ja/function.fopen.php
環境は、
Vine Linux 2.0
postfix-0.0.19991231pl09-0vl4
php-3.0.18_i18n_ja-2
で、プログラムの起動はタカハシさん同様に次のようにしています。
(/etc/postfix/aliases 内での記述)
ask: |/usr/hogehoge/bin/askd
bounce: |/usr/hogehoge/bin/bounced
askdの方はメールの中身が必要なので生メールを取得していますが、
bouncedの方はエラーを返した相手さえ分かればよいので
(回数をDBにてカウントしています)
Postfixの「拡張アドレス」を使って
(デリミタとして'-'を設定)
bounce-100001@hogehoge.net
のようなアドレスで登録ユーザーのユーザーID(100001)を取得しています。
しかしこのままだと意図してこのアドレスにメールを送れば
エラーメールとしてカウントアップされてしまいますよね。
そこで...
まだ実装はしてみていませんが、
ユーザーごとに複雑でユニークなIDを作成してDBに保存、
Errors-Toを
bounce-fukuzatudeunique@hogehoge.net
として「拡張アドレス」として取得した「fukuzatudeunique」を
DB中のデータとマッチングさせる方法がよいかなと思っています。
他には
bounce-foo%40bar.com@hogehoge.net
といった感じで宛先のメールアドレスをErrors-Toのアドレスに埋め込んで送信、
「拡張アドレス」として取得した「foo%40bar.com」から相手を特定とか。
エラーメールの返し方は相手のメールサーバーによってまちまちっぽいので、
僕はエラーメールの本文を解析するのは諦めました。
-----
>>> With your dreaming, ☆彡 Hayakawa,Hiroshi <<<
>>> with your smile. ☆彡 hayakawa@sam.hi-ho.ne.jp <<<
>>> ☆彡 Nagoya,Aichi,JAPAN <<<