Ruby on RailsのアプリケーションでPostfix経由でメールを受信する

RedMine.JP:メールによるチケットの登録を参考につくれば良いみたい。とりあえず、メモ。

Postfixでメールを受け取る設定

以下にまとめたとおり

RedMineでメールを受け取る仕組み

RedMine.JP:メールによるチケットの登録より

以下のいずれかの方法でRedmineがメールを受け取るよう設定できます:

  • メールサーバからメールを転送:
    • 利点: メールサーバがRedmineとは異なるサーバでもよい, メールが即座に処理される, 高速(アプリケーションのリロードが不要)
    • 欠点: needs some configuration on your mail transfer agent (eg. Postfix, Sendmail…)
  • IMAPサーバからの受信:
    • 利点: 設定が容易、MTAの設定が不要, メールサーバがRedmineとは異なるサーバでもよい
    • 欠点: メールの処理が即座には行われない (定期的にメールの取得を行うためのcronのジョブを追加する必要がある)
  • 標準入力からのメール読み込み:
    • 利点: テスト用途に最適
    • 欠点: 遅い(メールが到着するごとにRedmineのアプリケーションのリロードが行われる), MTA上での設定が必要

1の方法の実現方法は以下のとおり

  1. PostfixなどのMTAでメールを受信する
  2. 受信したメールを rdm-mailhandler.rb に標準入力で引き渡す
  3. rdm-mailhandler.rb がオプション情報を付加して、POSTメソッドで MailHandlerController#indexに送信
  4. MailHandlerController#indexにて、ActionMailer::Baseを継承したモデルMailHanderにデータを引き渡す
  5. MailHanderモデルでオプションとメール生データを切り分けて処理