with rails for ruby-on-rails ruby-on-rails-3 actionmailer

ruby on rails - for - Envío de correo con Rails 3 en entorno de desarrollo



sendgrid with actionmailer (8)

Además, tu nombre de usuario de gmail no tiene alias.

Ref: https://support.google.com/mail/answer/12096?hl=en

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!

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

He intentado un montón de maneras diferentes, pero generalmente equivalen a configurar las siguientes configuraciones

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 intentado el código anterior (con los detalles de gmail válidos por supuesto) en mi config / environment.rb, config / environments / development.rb y actualmente lo tengo en su propio initialiser config / initialisers / setup_mail.rb

También he intentado con algunos servidores smtp diferentes, incluidos Gmail y Sendgrid, ajustando la configuración smtp en consecuencia, pero todavía 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 me haya pasado por alto y que deba configurarse 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? yo tengo

config.action_mailer.raise_delivery_errors = true

configurado en mi config / development.rb pero el log de desarrollo todavía muestra lo mismo que veo en la 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


Bueno, he resuelto el problema, pero por qué funciona esto y los otros métodos no, no sé.

La solución fue crear un inicializador en config / initialisers / setup_mail.rb que contenga lo siguiente

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

Luego agregué config / email.yml que contiene los detalles de las cuentas de correo electrónico dev y producción

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ó ser el truco. Gracias a todos por los indicadores


Intenta 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 }


Mis dos centavos valen:

Tenía exactamente los mismos síntomas con Rails 5.1: no pasó nada, las configuraciones en mi archivo development.rb fueron completamente ignoradas ...

¡Entonces recordé reiniciar la máquina! (lo cual resolvió mágicamente el problema)

Esto fue señalado por un par de comentarios anteriores.

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

# 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*.


Simplemente ponga todas las configuraciones en: config / environments / 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í


Tengo lo siguiente en config/environments/development.rb

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

La configuración de correo real, config.actionmailer.* he colocado en config/application.rb .

Espero que esto ayude :)


Tres cosas.

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

Segundo, no olvide reiniciar su servidor cada vez que modifique este (o cualquier) archivo de inicializador. Esto podría explicar por qué no vio un error después de agregar:

config.action_mailer.raise_delivery_errors = true

Sin ese mensaje de error, es difícil determinar por qué el correo no funcionaba, pero ahora sí. 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, "P@ssw/0rd" se convertiría en P@ssrd ). 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.


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

fueron los dos pasos necesarios que me ayudaron a superar este problema