2013-04-29 131 views
5

當通過的ActionMailer Rails中發送電子郵件,它記錄是這樣的:過濾掉的電子郵件地址

Sent mail to [email protected] (72ms) 
    Rendered mailer/_header.html.erb (0.0ms) 
    ... 

我想過濾來自日誌的電子郵件ALA參數過濾

Sent mail to [FILTERED] (72ms) 
    Rendered mailer/_header.html.erb (0.0ms) 
    ... 

是有一個乾淨的方式來做到這一點?或者,不記錄整個第一行將是確定的。

回答

0

你可以讓一隻猴子,修補你的當前操作郵件:

  1. 發現寶石的源代碼爲您的軌道版本(在我的情況下,它在~/.rvm/gems/[email protected] /寶石/的ActionMailer-XXX/lib目錄/ action_mailer
  2. 發現包含「已發送郵件」
  3. 從步驟創建你的「lib」目錄文件,像這樣(副本的內容和粘貼代碼的方法2並將「收件人」更改爲「[過濾]」:

    module ActionMailer 
    
    class LogSubscriber < ActiveSupport::LogSubscriber 
    
    def deliver(event) 
        return unless logger.info? 
        #recipients = Array(event.payload[:to]).join(', ') 
        info("\nSent mail to [FILTERED] (#{event.duration.round(1)}ms)") 
        debug(event.payload[:mail]) 
    end 
    
    end 
    
    end 
    

對於我的版本的action_mailer代碼會是這樣:

def deliver!(mail = @mail) 
    raise "no mail object available for delivery!" unless mail 
    unless logger.nil? 
    logger.info "Sent mail to [FILTERED]" 
    # instead of original logger.info "Sent mail to #{Array(recipients).join(', ')}" 
    logger.debug "\n#{mail.encoded}" 
    end 

    begin 
    __send__("perform_delivery_#{delivery_method}", mail) if perform_deliveries 
    rescue Exception => e # Net::SMTP errors or sendmail pipe errors 
    raise e if raise_delivery_errors 
    end 

    return mail 
end 
+0

'急救Exception'是邪惡 http://stackoverflow.com/questions/10048173/why-is-it -bad風格到救援的異常-E-在旁註 – 2016-12-14 07:46:39

0

在Rails源代碼./actionmailer/lib/action_mailer/log_subscriber.rb

module ActionMailer 
    class LogSubscriber < ActiveSupport::LogSubscriber 
    def deliver(event) 
     return unless logger.info? 
     recipients = Array(event.payload[:to]).join(', ') 
     info("\nSent mail to #{recipients} (#{event.duration.round(1)}ms)") 
     debug(event.payload[:mail]) 
    end 

    def receive(event) 
     return unless logger.info? 
     info("\nReceived mail (#{event.duration.round(1)}ms)") 
     debug(event.payload[:mail]) 
    end 

    def logger 
     ActionMailer::Base.logger 
    end 
    end 
end 

Rails的不提供一種方法來過濾電子郵件,讓您可以:

  • 叉架,刪除此信息,並使用軌道您分叉版本。
  • 編輯此代碼,添加一些過濾器,並提出拉請求。
相關問題