1

ActionMailer Observerを定義しましたが、呼び出されていません。これをトラブルシューティングするにはどうすればよいですか?Rails 3.1.3、Ruby1.9.2。または、特定のActionMailerサブクラスから電子メールが送信されるたびに呼び出されるメソッドが必要です。これは、これを実装するために見つけることができる唯一のクリーンな方法です(ActionMailerサブクラスの各メーリングメソッドからメソッドを呼び出すことはできますが、それはあまりDRYではありません)。これを達成する方法に関する他の提案は大歓迎です。

config/initializers/mail_observer.rb:
  class MailObserver
    def self.delivered_email(message)
      require 'ruby-debug' ; debugger
      user = User.find_by_email(message.to[0])
      if user
        email_type = caller[1]
        UserMailerLogging.create!(user_id: @user.id, email_type: email_type, contents: self.body)
      end
    end
  end

  ActionMailer::Base.register_observer(MailObserver)

app/mailers/user_mailer:
  class UserMailer < ActionMailer::Base
    default from: "no-reply@testing.com"
    ...
    def unfinished_setup(user)
      @user = user
      mail to: user_email(user), subject: "Testing..."
    end
    ...
  end

そして、Railsコンソールで:

irb(main):001:0> UserMailer.unfinished_setup(User.find(1))    
=> #<Mail::Message:70192154395900, Multipart: false, Headers: <From: no-reply@testing.com>, <To: Test User<user@testing.com>>, <Subject: Testing...>, <Mime-Version: 1.0>, <Content-Type: text/plain>>
4

1 に答える 1

3

あなたが実際にメッセージを届けるまで、オブザーバーは発砲しないと思います。Railsコンソールのコードは、メールを作成するだけで、送信することはありません。最後に追加.deliverすると、メッセージが配信され、オブザーバーコードが実行されます。

于 2013-02-14T22:56:08.673 に答える