ここでは外部から送られてきたメールを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;
}
}
関連項目