[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        <<<