2011-11-06 53 views
3

我的應用程序有一個UserMailer,其中包含多個郵件發送方法,其中大部分郵件都通過延遲作業發送出去。Rails,每次發送電子郵件時如何保持數據庫表日誌

我想有一個數據庫表中創建一個記錄每一個郵件被髮送出去的時間。該應用程序使用sendgrid進行發送,但我不相信sendgrid 100%,並希望在應用程序中保留一條記錄以進行調試。

有一個高層次的方式在全球範圍內捕捉當郵件被髮送出去,並在數據庫記錄,而不是被強迫的邏輯到過郵件的方法?

感謝

回答

1

我通過電子郵件模型解決這個問題,用「到」和「GUID」字符串字段。

def self.deliver(which, to, guid, *args) 
    transaction do 
    if self.where(:email => to, :guid => guid).first.nil? 
     if record = Email.create(:email => to, :guid => guid, :template => which) and !record.new_record? 
     Mailer.send("deliver_#{which}", to, *args) 
     end 
    end 
    end 
end 

這是Rails 2.3郵件程序,所以Rails 3的調用會有點不同,但核心概念是成立的。而不是直接調用的郵件,你會調用:

Email.deliver(email_name, receipient, some_guid_you_generate_for_this_email, *args_to_be_sent_to_mailer) 

這將檢查數據庫,以確保你沒有重複發送相同的電子郵件到指定的地址,並且將保留所有的記錄發送了您可以在將來查看的電子郵件。

+0

謝謝,但我希望的更多的是觀察者的概念,以不被強制破解標準郵件傳遞方法。 – AnApprentice

相關問題