2011-01-05 17 views
6

In un'applicazione Rails ho creato un nuovo ambiente di staging con i seguenti parametri nella sua environments/ di file:Controllo della registrazione e l'invio di messaggi di posta elettronica in diversi ambienti

config.action_mailer.perform_deliveries = true 
config.action_mailer.raise_delivery_errors = true 
config.action_mailer.delivery_method = :smtp 

Tuttavia, quando il sistema genera una e-mail, è viene stampato nel file staging.log invece di essere inviato. Le mie impostazioni SMTP funzionano bene in altri ambienti. Quale configurazione mi manca per far sì che le e-mail vengano realmente inviate?

Modifica: Sì, la casella di gestione temporanea è configurata con una configurazione valida per un server SMTP a cui ha accesso. Sembra che il problema non sia con le impostazioni SMTP (se lo fosse, non otterrei errori nei log?), Ma con la configurazione di Rails. L'applicazione sta ancora reindirizzando le e-mail al file di log (dicendo "Posta inviata: ...") invece di passare effettivamente attraverso SMTP.

Modifica n. 2: Sembra che le e-mail siano state inviate correttamente, si è appena verificato anche la stampa sul registro. Sto cercando di usare la gemma sanitize_email per reindirizzare la posta a un altro indirizzo, e non sembra funzionare, ed è per questo che ho pensato che le email non uscissero. Quindi penso che risolva il mio problema, anche se sono ancora curioso di sapere cosa nelle impostazioni di ActionMailer controlla se le e-mail vengono inviate, registrate nel file di registro o entrambe.

Modifica # 3: Il problema con sanitize_email bollito fino a me la necessità di aggiungere il nuovo ambiente di gestione temporanea ActionMailer::Base.local_environments. Terrò questa domanda aperta per vedere se qualcuno può rispondere alla mia ultima domanda (cosa determina se le e-mail di ActionMailer vengono inviate, registrate nel file di registro, o entrambe?)

+1

La casella di gestione temporanea dispone di un server SMTP funzionante? – jdl

+0

Hai impostato config.action_mailer.smtp_settings con localhost, porta 25 e qualche dominio? – marko

risposta

10

Per quanto riguarda la terza modifica, la registrazione è una funzione di quale livello di registro hai impostato per l'app stessa, nessuna impostazione particolare in ActionMailer.

In Rails 2.3, ActionMailer::Base è sufficiente inviare l'e-mail a qualsiasi logger è stato configurato, se presente. Il destinatario viene inviato al registro info e il corpo del messaggio viene inviato al registro debug. (I commenti sono miei. Il resto è direttamente dal codice sorgente.)

def deliver!(mail = @mail) 
    raise "no mail object available for delivery!" unless mail 

    # 
    # Logging happens first (or not) 
    # 
    unless logger.nil? 
    logger.info "Sent mail to #{Array(recipients).join(', ')}" 
    logger.debug "\n#{mail.encoded}" 
    end 

    # 
    # And then we decide if an email should really get sent 
    # 
    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 

tuo environment.rb o staging.rb file dovrebbe avere una linea che controlla il livello di log. Qualcosa di simile a quanto segue:

config.log_level = :debug 

Questo è tutto completamente separata dalla configurazione mailer che hai già trovato, che controlla se il messaggio viene inviato o meno.

config.action_mailer.perform_deliveries = true 
+0

Grazie, ottima risposta! Questo lo risolve. – jrdioko

Problemi correlati