Hatena::ブログ(Diary)

tkrdの日記 (rails や ubuntu のことなど)

株式会社オイアクス (東京都港区芝大門) で社長をしています。

2011-11-03

Rails: 宛先不明で戻ってくるメールを処理する

01:50

ActionMailer でユーザーにメールを送って、「宛先不明」等で戻ってきた時には、ユーザーのアカウントを無効にする処理をする方法のメモ。

まず、こんな風に書きます。

class MyMailer < ActionMailer::Base
  default :from => 'info@example.com',
    :return_path => 'error@example.com'
  
  def notification(user)
    headers['X-ORIGINAL-TO'] = user.email
    mail :to => user.email, :subject => 'お知らせ'
  end
  
  def receive(email)
    email.body.to_s.split(/\n/).each do |line|
      if line.match(/^X-ORIGINAL-TO: /)
        email = Regexp.last_match.post_match
        
        u = User.find_by_email(email)
        u.active = false
        u.save!
        break
      end
    end
  end
end

X-ORIGINAL-TO という独自ヘッダを付けてメールを送っています。独自ヘッダの名前は何でもいいです。

/etc/aliaes に次のような記述を追加。

error: | "/var/rails/foo/current/script/rails runner -e production 'MyMailer.receive(STDIN.read)'"

ただし、/usr/local/bin 等に ruby がある場合は、/usr/bin/env: ruby: No such file or directory というエラーが出ます。

その場合は、/etc/aliaes をこのように書き換えてください。

error: | "PATH=/usr/local/bin:$PATH /var/rails/foo/current/script/rails runner -e production 'MyMailer.receive(STDIN.read)'"

トラックバック - http://d.hatena.ne.jp/tkrd/20111103/1320339021
リンク元
Connection: close