2013-04-29 7 views
5

Quando si inviano messaggi di posta elettronica tramite ActionMailer in Rails, registra qualcosa come:Filtro gli indirizzi e-mail dai registri ActionMailer

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

vorrei filtrare i messaggi di posta elettronica dai registri ala filtraggio parametro

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

Is c'è un modo pulito per fare questo? In alternativa, non registrare l'intera prima riga sarebbe OK.

risposta

0

È possibile effettuare una scimmia-patching per il vostro attuale programma di posta azione:

  1. trovare il codice sorgente di gioiello per la versione di rotaie (nel mio caso è in ~/.rvm/gems/[email protected]/gemme/ActionMailer-xxx/lib/action_mailer
  2. trovare un metodo che contiene "posta inviata a"
  3. Creare un file nella directory "lib" con il contenuto come questo (copia e incolla il codice dal passaggio 2 e modifica i "destinatari" in "[FILTRATO]":

    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 
    

Per la mia versione del action_mailer il codice sarebbe simile a questo:

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

'salvataggio Exception' è il male http://stackoverflow.com/questions/10048173/why-is-it -Bad-style-a-rescue-eccezioni-e-in-ruby –

0

In Rails codice sorgente ./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 non fornisce un metodo per filtrare e-mail, in modo da poter:

  • rotaie della forcella, rimuovere queste informazioni, e utilizzare la versione biforcuta di rotaie .
  • modificare questo codice, aggiungere un filtro ed effettuare una richiesta di pull.
Problemi correlati