ActionMailer no envía correo en desarrollo Rails 4


¿Por qué este correo no envía ningún correo? (O alguna idea para la depuración?)

En my_app/config/environments/development.rb Tengo este código:

  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    address:              'smtp.gmail.com',
    port:                 587,
    domain:               'my_app.com',
    user_name:            ENV['GMAIL_USERNAME'],
    password:             ENV['GMAIL_PASSWORD'],
    authentication:       'plain',
    enable_starttls_auto: true  }

Luego en mi equipo local en ~/.bash_profile tengo este código:

export GMAIL_USERNAME='blah@my_app.com'
export GMAIL_PASSWORD='***'

Cuando corro $ env en mi terminal, veo que ambas variables de entorno están correctamente configuradas.

También he reiniciado mi servidor rails.

Author: Don P, 2013-12-25

4 answers

Debe agregar

config.action_mailer.perform_deliveries = true

Como de forma predeterminada, esto es falso, evitando que se envíen correos desde su entorno de desarrollo...

 101
Author: Danny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-23 15:32:11

Para cualquiera que no use smtp, cambiar el método de entrega a sendmail me ayudó además de establecer explícitamente las entregas a realizar:

config.action_mailer.delivery_method = :sendmail
 10
Author: Aaron Krauss,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-25 18:41:19

Si tiene problemas para enviar correo electrónico desde la consola, debe llamar al método de entrega en su correo.

MyMailer.create_email.deliver
 9
Author: Michael Brawn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-14 21:39:20

Así que lo he descubierto. Tener la línea ActionMailer::Base.delivery_method = :smtp en config/environment.rb anula ActionMailer::Base.delivery_method = :test en config/environments/test.rb.

Entonces, borra esa línea, ActionMailer::Base.delivery_method = :smtp de config/environment.rb y colócala en config/environments/production.rb. Eso le permite colocar ActionMailer::Base.delivery_method = :test en config/environments/test.rb y la versión que desee en config/environments/development.rb. Yo hice development.rb :test como llené mi base de datos usando Faker y la cambié a :smtp, así que estaba seguro de que los correos electrónicos reales se enviaban como una comprobación adicional.

Nota: Debe reiniciar su servidor para que estos cambios surtan efecto.

Otra nota: Las instrucciones actuales de SendGrid de Heroku ( https://devcenter.heroku.com/articles/sendgrid ) coloque el código de configuración de SendGrid Heroku en un nuevo archivo config/initializers/mail.rb que probablemente requerirá eliminar su última línea y colocar la versión deseada en cada config/environments/[production.rb, development.rb, test.rb]

 0
Author: DJSampat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-14 14:20:00