2010-11-30 19 views
53

Estoy seguro de que esto se ha preguntado un millón de veces antes, pero no puedo encontrar nada que me sirva, ¡así que vuelvo a preguntar!Enviando correo con Rails 3 en el entorno de desarrollo

Solo necesito una forma de enviar correos electrónicos utilizando ActionMailer in rails 3. He seguido numerosos tutoriales, incluido el tutorial de Railscasts sobre el nuevo ActionMailer, y puedo ver los correos generados pero no los recibo.

He probado un montón de diferentes maneras, pero generalmente ascenderá a configurar los siguientes ajustes

ActionMailer::Base.delivery_method = :smtp 

ActionMailer::Base.smtp_settings = { 
    :address    => "smtp.gmail.com", 
    :port     => "587", 
    :domain    => "gmail.com", 
    :user_name   => "[email protected]", 
    :password    => "yyy", 
    :authentication  => "plain", 
    :enable_starttls_auto => true 
} 

He probado el código anterior (con los datos válida de Gmail, por supuesto) en mi config/environment.rb, config/environments/development.rb y actualmente lo tiene en su propio initialiser config/initialisers/setup_mail.rb

También he intentado con algunos servidores smtp diferentes, incluyendo Gmail y Sendgrid, ajustando la configuración smtp en consecuencia, pero aún nada. Puedo ver el correo en la terminal y el registro de desarrollo, y eso es todo.

¿Alguien sabe de algún otro problema que pueda haber pasado por alto y que deba ser configurado para que ActionMailer funcione? En su defecto, ¿hay alguna forma de obtener más información sobre por qué no se envían los correos? Tengo

config.action_mailer.raise_delivery_errors = true 

conjunto en mi config/development.rb pero el log de desarrollo sigue siendo sólo muestra lo mismo que veo en el terminal.

Por lo que vale, estoy desarrollando en una computadora portátil Ubuntu 10.04 en caso de que haya alguna configuración específica necesaria para eso.

Muchas gracias

+0

¿Se puede probar a eliminar: dominio de la configuración o cambiar a algún otro dominio. –

Respuesta

55

Bien, he resuelto el problema, pero bastante por qué esto funciona y los otros métodos no lo hizo, no sé.

La solución era crear una initialiser en config/inicializadores/setup_mail.rb que contiene los siguientes

if Rails.env != 'test' 
    email_settings = YAML::load(File.open("#{Rails.root.to_s}/config/email.yml")) 
    ActionMailer::Base.smtp_settings = email_settings[Rails.env] unless email_settings[Rails.env].nil? 
end 

entonces añadí config/email.yml que contiene los detalles del correo electrónico dev y la producción de cuentas

development: 
    :address: smtp.gmail.com 
    :port: 587 
    :authentication: plain 
    :user_name: xxx 
    :password: yyy 
    :enable_starttls_auto: true 
production: 
    :address: smtp.gmail.com 
    :port: 587 
    :authentication: plain 
    :user_name: xxx 
    :password: yyy 
    :enable_starttls_auto: true 

Como digo, no tengo idea de por qué, pero esto pareció hacer el truco. Gracias a todos por los punteros

+3

Esto funcionó y nada más lo hizo. Muy confundido sobre por qué funciona, pero gracias. Las horas de google han llegado a su fin. Debería haber venido aquí para empezar. – LondonGuy

+2

Muchas gracias, realmente funciona y no sé por qué! – Sergei

+1

He buscado una buena solución para esto por un tiempo y esto es exactamente lo que debería haber estado haciendo en primer lugar. ¡Gracias! –

5

Trate de usar 'sendmail' en lugar de 'SMTP'.

ActionMailer::Base.delivery_method = :sendmail 
ActionMailer::Base.sendmail_settings = { 
    :address    => "smtp.gmail.com", 
    :port     => "587", 
    :domain    => "gmail.com", 
    :user_name   => "[email protected]", 
    :password    => "yyy", 
    :authentication  => "plain", 
    :enable_starttls_auto => true 
} 
+0

Gracias por la sugerencia. Desafortunadamente, acabo de probarlo y obtengo exactamente el mismo comportamiento con sendmail – Addsy

+0

¡sendmail resolvió este problema para mí! – MrThomas

27

I tienen la siguiente en config/environments/development.rb

config.action_mailer.raise_delivery_errors = true 
config.action_mailer.perform_deliveries = true 

La configuración electrónico real, config.actionmailer.* he colocado en config\application.rb.

Espero que esto ayude :)

+6

perform_deliveryies es la clave – Cory

+0

Gracias chicos, desafortunadamente los dos ya estaban allí. Gracias por las sugerencias tho – Addsy

+0

En ese caso, debería estar recibiendo errores por qué no está funcionando. ¿Correcto? – nathanvda

3

Tres cosas.

Primero, el puerto es un número entero y no necesita comillas, como en el primer ejemplo. (Pero creo que una cadena todavía debería funcionar.)

En segundo lugar, no olvide reiniciar su servidor cada vez que modifique este (o cualquier) archivo de inicializador. Esto podría explicar por qué no se ve un error después de añadir:

config.action_mailer.raise_delivery_errors = true

Sin tener ese mensaje de error, es difícil de determinar por qué el correo no iba pero ahora es. Una posibilidad es el uso de comillas dobles alrededor de la contraseña. Si usabas una contraseña segura y un token en tu contraseña que no se había escapado, podría haberse reinterpretado. (es decir, "[email protected]\0rd" se convertiría en [email protected]). Por este motivo, siempre utilizo comillas simples en mi código a menos que necesite específicamente el azúcar sintáctico.

Por último, enable_starttls_auto: true es el valor predeterminado e innecesario.

1

sólo hay que poner todos los config para: config/ambientes/development.rb

quiero decir

ActionMailer::Base.delivery_method = :smtp 

ActionMailer::Base.smtp_settings = { 
    :address    => "smtp.gmail.com", 
    :port     => "587", 
    :domain    => "gmail.com", 
    :user_name   => "[email protected]", 
    :password    => "yyy", 
    :authentication  => "plain", 
    :enable_starttls_auto => true 
} 

y

config.action_mailer.raise_delivery_errors = true 
config.action_mailer.perform_deliveries = true 

funcionó para mí .

1

ActionMailer::Base.delivery_method = :sendmail
y
config.action_mailer.perform_deliveries = true

eran los dos pasos necesarios que me consiguió sobre este tema

0

Mis dos centavos vale la pena:

que tenían los mismos síntomas exactos con los carriles de 5.1 : No pasó nada, las configuraciones en mi archivo development.rb fueron completamente ignoradas ...

¡Entonces me acordé de reiniciar la máquina! (que resolvió mágicamente el problema)

Esto ha sido señalado por un par de comentarios anteriores.

El problema es complicado, sin embargo, porque no espera este comportamiento. En mi opinión, los comentarios por defecto en development.rb son, a este respecto, engañosa:

# In the development environment your application's code is reloaded on 
# every request. This slows down response time but is perfect for development 
# since *you don't have to restart the web server when you make code changes*. 
Cuestiones relacionadas