2011-01-05 20 views
6

En una aplicación Rails He creado un nuevo entorno de ensayo con los siguientes parámetros en su environments/ archivo:El control de la tala y el envío de correos electrónicos en diferentes entornos

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

Sin embargo, cuando el sistema genera un correo electrónico, se imprime en el archivo staging.log en lugar de enviarse. Mi configuración SMTP funciona bien en otros entornos. ¿Qué configuración me falta para que los correos electrónicos realmente se envíen?

Editar: Sí, la caja de transición está configurada con una configuración válida para un servidor SMTP al que tiene acceso. Parece que el problema no está en la configuración de SMTP (si fuera así, ¿no recibiría errores en los registros?), Sino con la configuración de Rails. La aplicación sigue redirigiendo correos electrónicos al archivo de registro (que dice "Correo enviado: ...") en lugar de pasar por SMTP.

Editar # 2: Parece que los correos electrónicos en realidad han estado enviando correctamente, sino que también se imprimen en el registro. Estoy tratando de usar la gema sanitize_email para redirigir el correo a otra dirección, y eso no parece funcionar, y es por eso que pensé que los correos electrónicos no saldrían. Así que creo que eso resuelve mi problema, aunque todavía tengo curiosidad de qué en la configuración de ActionMailer controla si los correos electrónicos se envían, se registran en el archivo de registro o ambos.

Edición # 3: El problema con sanitize_email se reducía a mi necesidad de añadir el nuevo entorno de ensayo a ActionMailer::Base.local_environments. Mantendré abierta esta pregunta para ver si alguien puede responder mi última pregunta (¿qué determina si los correos electrónicos de ActionMailer se envían, se registran en el archivo de registro o ambos?)

+1

¿Su caja de transición tiene un servidor SMTP en funcionamiento? – jdl

+0

¿Ha establecido config.action_mailer.smtp_settings con localhost, puerto 25 y algún dominio? – marko

Respuesta

10

En cuanto a su tercera edición, el registro es una función de qué nivel de registro ha configurado para la aplicación en sí, no una configuración particular en ActionMailer.

En Rails 2.3, ActionMailer::Base simplemente envíe el correo electrónico a cualquier registrador que se haya configurado, si lo hay. El destinatario se envía al registro info y el cuerpo del correo electrónico se envía al registro debug. (Los comentarios son la mía. El resto está justo fuera del código fuente.)

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 

Su archivo environment.rb o staging.rb debe tener una línea que controla el nivel de registro. Algo así como lo siguiente:

config.log_level = :debug 

Todo esto es totalmente independiente de la configuración del gestor de correo que ya ha encontrado, que controla si el correo electrónico se envía o no.

config.action_mailer.perform_deliveries = true 
+0

Gracias, excelente respuesta! Eso lo aclara. – jrdioko

Cuestiones relacionadas