PHPインバウンド処理

着信メールの自動処理のために、PHPスクリプトとPostfixメールサーバーを組み合わせる方法に関するレシピを共有したいと思います。



このバンドルを使用して、返送メールの返送数に関する統計を収集します。未送信メールが送信者に返送されました。



他のサイトでは、たとえば、ユーザーに割り当てられたメールボックスにコンテンツを送信することでコンテンツを公開するなど、同様の機能に出会いました。



方法

  1. まず、動作するメールサーバーがあることを確認します。



    サブドメインに別のメーラーを作成し、DNSに2つのエントリを作成できます。

     rob.mydomain.ru. A ip-- rob.mydomain.ru. MX rob.mydomain.ru.
          
          





  2. エイリアス/ etc /エイリアスを使用してファイルを編集します。

    そこに行を追加します:

    robot: "|php -q ///.php"





    robot



    はメールボックスの名前です。

    ///.php



    着信///.php



    を処理するスクリプト。



    編集後、 newaliases



    コマンドを実行しnewaliases







  3. 後置設定で、 main.cf



    はパラメーターの追加を推奨します:

    recipient_delimiter = +







    次に、アドレスで追加情報をエンコードすることができます: robot+someId@rob.mydomain.ru







    そのような住所への手紙もすべて、スクリプトによって処理されます。

    someId



    は、ユーザーIDまたはその他のデータをsomeId



    できます。

  4. スクリプトメッセージハンドラーを作成します。

     <?php /** *       * *   smtp-  RECIPIENT, SENDER   postfix *    $_ENV;   : * http://www.postfix.org/local.8.html  EXTERNAL COMMAND DELIVERY */ //    STDIN $msg = file_get_contents("php://stdin"); //  $sender = getenv('SENDER'); //  $recipient = getenv('RECIPIENT'); //  list($header, $body) = explode("\n\n", $msg, 2); //   Subject:  From: $subject = ''; $from = ''; $headerArr = explode("\n", $header); foreach ($headerArr as $str) { if (strpos($str, 'Subject:') === 0) { $subject = $str; } if (strpos($str, 'From:') === 0) { $from = $str; } } //      : $logMsg = "=== MSG ===\n"; $logMsg .= "SENDER: $sender\n"; $logMsg .= "RECIPIENT: $recipient\n"; $logMsg .= "$from\n"; $logMsg .= "$subject\n\n"; $logMsg .= "$msg\n"; file_put_contents('/tmp/inb.log',$logMsg, FILE_APPEND);
          
          



  5. robot@rob.mydomain.ruに電子メールを送信し、ログ/tmp/inb.logを調べます

できた!




All Articles