1

メールを受信し、フィルタリングのためにphpファイルを介して送信するためにpostfixを使用しています。

後置master.cfで私は使用します:

`smtp inet n - - - - smtpd -o content_filter=PHPFilter:dummy`  

また

`pickup fifo n - - 60 1 pickup -o content_filter=PHPFilter:dummy`

問題は、電子メールが php ファイルを通過し、基準が満たされない場合はどうなるかということです。 postfixを再開する方法はあり ますbreakか ?exit

たとえば、 address:info@domain.netはエイリアスであり、接尾辞で処理する必要があります。
ただし、次のような数字の電子メール12345@domain.netは、php フィルターで処理する必要があります。
しかし、誰かが次のような存在しない電子メールに電子メールを送信した場合はどうなりますかspam@domain.net

そのまま: smtp を使用する場合 (キューイングの前) に php フィルターが実行されますが、数字の接尾辞でない場合は実行されないか、少なくともエイリアス db と比較されません。
ピックアップを使用する場合 (キューイング後)、ポストフィックスは 550 エラー (受信者アドレスが拒否されました: 仮想メールボックス テーブルで不明なユーザー) をスローします。これは、エイリアス データベースに存在しないためです。

4

2 に答える 2

1

わかりました。これが理解できなかった私のような他の人のための説明です。それはまだきれいではありません (生データはありませんが、代わりに新しいメールが postfix に挿入されます。) 最初に、上記の master.cf (postfix) の put/replace:

smtp inet n - - - - smtpd -o content_filter=PHPFilter:dummy

PHPFilter unix  -   n   n   -   10  pipe
  flags=F user=www-data null_sender=
  argv=/var/secure/postfix.php -f ${sender} -- ${recipient}

数値の電子メールアドレスを受け入れるために、番号が有効/存在するかどうかをデータベースで確認するために virtual_mailbox_maps を作成しました。

これまでのポストフィックス。今は postfix.php フィルタ ファイルです。最初に受信メールを読みます。

    if($fd = @fopen("php://stdin", "r")) {
        while (!feof($fd)) {
            $this->email .= fread($fd, 1024);
        }
        fclose($fd);
        return true;
    }

これを PEAR::Mail_mimedecode でデコードして、必要に応じて処理 (フィルタリング) および操作できる必要なすべての変数を取得できます。postfix.php フィルターがフィルターの必要なパラメーターを満たしている場合は、exit(0) を返して、postfix にすべてが処理されたことを通知し、それ以上のアクションは必要ありません。

メールが要件を満たしていない場合、またはローカルのメールボックスの場合は、ローカル ポートを使用してメールを postfix に再挿入する必要があります (したがって、PEAR::mail->send('smtp') を使用しないでください) 代わりに PEAR を使用します。 :Mail->send('sendmail') ポストフィックスに挿入し直します。これには、ゼロから新しいメールを作成する必要があります。PEAR::Mail_mimedecode によって提供される変数を使用します。

$headers = array(
    'From' => $this->headers['from'],
    'To' => $this->headers['to'],
    'Subject' => $this->headers['subject'],
    'Date' => $this->headers['date']
    );

これが誰にも役立つことを願っています。ここでプロセスを提供します。もちろん、あなたが好きなように、そして安全のために精製する必要があります.
誰かがこのプロセスについて何かコメントがあれば、提供してください。安全性の問題や、これを行うためのより良いアプローチがあるかどうかを知りたい.

于 2013-02-25T13:06:39.327 に答える