2012-01-03 10 views
0

私はRailsの初心者ですので、愚かな質問を申し訳ありません。電子メールを送信するために、私はActionMailerをRails 2.3.5で使用します。構文はactionmailerのインスタンスのモデルでActionMailer workflow

deliver_maintest1

deliver_maintest2

に従っている私は

DEF

をmaintest1ています

エンド

デフ私はいかなる明示的に定義された方法メールありません理解したよう...私は、受信者、件名、ヘッダを設定

エンド

内部定義をmaintest2ました実際にメールが送信されます。電子メールはdef maintest1とmaintest2から送信されます。問題は電子メールを送信する前です。maintest1とmaintest2と思って送信されたメールの数をいくつか定義する必要があります。今私はmaintestのような数十のdefsを持っていることを考慮に入れてください。だから私はそれらのすべてのdefsのための共通の場所が必要です。あなたの意見では、何が最善の解決策ですか?

ありがとうございます!

答えて

2

レール3以上でを使用できます。これらはメッセージオブジェクトを通過するすべてのメール配送の後に呼び出されます。 delivered_emailクラスメソッドを実装して登録するだけです。

class EmailObserver 
    def self.delivered_email(message) 
    # do something with message 
    end 
end 

その後、これは(それはルビー標準ライブラリからtmailを使用してメールの宝石を使用していないレール2.xでは、上では動作しません

Mail.register_observer(EmailObserver) 

でメールにそれをフック。 2.3.x以降で)

私は

class MyMailer < ActionMailer::Base 
    def deliver!([email protected]) 
    super 
    # do your logging here 
    end 
end 
+0

D'ohを見てみましょう。あなたがレール上にいることに気がつきました2。3 - 上記はレール3以上にのみ適用されます。レール2では、あなたのメーラでdeliverメソッドをオーバーライドしてみるかもしれません –

+0

ありがとう、私はActionMailerでdefの配信があるかどうかわかりません。 ActionMailerのためにafter_filterを定義するにはどうすればいいですか? – com

+0

フレデリック氏は、「デフ・デリバリー」はレール3+ –

1

"Mailer.deliver_maintest"を呼び出すたびに、それを追跡する必要がある特定の電子メールを送信した回数を数えるために、Mailer.deliver_maintestを呼び出して誰にでもメールを送信します。

このカウンタは、データベースかどこかに格納できます。このようなもの。

 
    // Some lines of code to Update the counter for the mailer 
    Mailer.deliver_maintest 

はまた、あなたの電子メールを送信するために消印のようなサードパーティ製の電子メールツールを使用することができます(あなたがタグで各電子メールを関連付けることができます彼らと、そして私は、一般的に送り出された電子メールを追跡するために、これらのタグを使用します)。

+0

おかげでたくさんのような何かをしようとするだろうが、私は彼らの十(maintest1、maintest ...)を持っています。私はmaintest外のカウンターを変更したくないです。もっと便利なものがあるはずだと思った。 PostMark – com