2013-04-29 11 views
5

Podczas wysyłania wiadomości e-mail za pośrednictwem ActionMailer w szynach, rejestruje coś takiego:odfiltrować adresy e-mail z bali ActionMailer

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

chciałbym do filtrowania wiadomości e-mail z dzienników ala filtrowania parametrów

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

Czy Czy jest to czysty sposób? Alternatywnie, niezalogowanie całej pierwszej linii byłoby OK.

Odpowiedz

0

Można dokonać małpa-łatanie dla bieżącego programu pocztowego Działanie:

  1. znaleźć kod źródłowy gem dla wersji szyn (w moim przypadku jest to w ~/.rvm/gems/[email protected]/kamienie/ActionMailer-xxx/lib/action_mailer
  2. znaleźć metodę, która zawiera „Wysłane do”
  3. Utwórz plik w swoim „lib” z zawartością tak (skopiuj i wklej kod z kroku 2 i zmień "odbiorców" na "[FILTERED]":

    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 
    

Dla mojej wersji action_mailer kodu byłoby tak:

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

'rescue Exception' jest zła http://stackoverflow.com/questions/10048173/why-is-it -bad-style-to-rescue-exception-e-in-ruby –

0

w szynach sourcecode ./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 nie jest dostarczenie sposobu filtrowania poczty, dzięki czemu można:

  • szyny widelec, usunąć te informacje i wykorzystywać swój rozdwojony wersję szynach .
  • edytuj ten kod, dodaj filtr i wykonaj żądanie pobrania.