RailsとPostfixで受信メールを処理する方法
Railsで受信メールを処理する方法はけっこう簡単です。 HowToReceiveEmailsWithActionMailerに書かれていることがすべてといってもいいでしょう。
ここではPostfixを使った方法を書いておきます。
1.Postfixのインストール
aptitude install postfix
2.受信メールを処理するコードをapp/modelsの下に置く。
class KaeruMailman < ActionMailer::Base
def receive(email)
...ユーザ認証したりメールの内容をDBにインサートしたりといった処理...
end
end
3./etc/postfix/master.cfの最後に、下記を追加する。
kaeruspoon-mailman unix - n n - - pipe
flags= user=tsukasa argv=/usr/bin/ruby /var/www/rails/kaeruspoon/script/runner -e production KaeruMailman.receive(STDIN.read)
userはRailsを実行しているユーザにします。KaeruMailmanのrecieveはインスタンスメソッドとして定義しますが、ここではクラスメソッドとして書きます。内部でインスタンスが勝手に作成されて、recieveメソッドが呼ばれるのです。
4./etc/postfix/main.cfの最後に、下記を追加する。
transport_maps = hash:/etc/postfix/transport
virtual_mailbox_domains = kaeruspoon.net
受け付ける受信メールのアドレスでユーザ認証を行う場合などは、local_recipient_mapsを無効にしておく必要があります(UNIXユーザ以外のメールアドレスは拒否されるから)。
local_recipient_maps =
5./etc/postfix/transportに(ファイルがなければ作成して)、下記を追加する。
kaeruspoon.net kaeruspoon-mailman:
これでkaeruspoon.netドメインのメールを受信したときは、master.cfで設定したkaeruspoon-mailmanのコマンドを実行するようになります。
上記設定を有効にするために下記コマンドを実行します。
postmap /etc/postfix/transport
これで設定完了です。/var/log/mail.infoをチェックして、受信したメールが正しくRailsに渡されているかどうかを確認できます。