PostfixからメールをSabelアプリに渡す | Tips

ここでは外部から送られてきたメールをPostfixで受け取り、Sabelに渡す方法を説明します。

まず、アプリケーションが受信するドメインを決めます。ここでは m.example.com とします。
そして、m.example.com上のPostfixで、下記の一行を追加します。
/etc/postfix/transport

...

m.example.com appname:
main.cfにて transport_maps を有効にします。
/etc/postfix/main.cf

...

transport_maps = hash:/etc/postfix/transport

...
設定を追加したら、下記のコマンドを実行します。
$ postmap /etc/postfix/transport
次はmaster.cfでメールをPHPに渡すための設定を行います。下記の設定を追加してください。
/etc/postfix/master.cf

...

appname unix  -    n    n    -    -    pipe
  flags= user=nobody argv=/usr/bin/php /path/to/project/sabel.php cli/mail/receive
上記は cliモジュール の mailコントロー ラの receiveアクション の実行を意図した例ですが、どのモジュール/コントローラ/アクションが実行されるかはルーティング設定によります。ルーティング設定に関する詳細はこちらを参照してください。

Postfixの設定が完了したので、再起動します。
$ /etc/init.d/postfix restart
あとは通常のアプリケーションと同様のコーディングを行うだけです。メールのソースは php://stdin から取得することができます。
app/cli/controllers/Mail.php

class Cli_Controllers_Mail extends Sabel_Controller_Page
{
  public function receive()
  {
    if ($source = file_get_contents("php://stdin")) {
      $decoder = new Sabel_Mail_MimeDecode();
      $mail = $decoder->decode($source);
      
      ...
      
    }
    
    exit;
  }
}

関連項目