ActionMailer不在发送Rails 4中发送邮件

为什么这封邮件不发送任何邮件? (或debugging任何想法?)

在my_app / config / environments / development.rb我有这样的代码:

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 } 

然后在我的本地计算机〜/ .bash_profile我有这样的代码:

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

当我在terminal中运行$ env时,我发现两个环境variables都正确设置。

我也重新启动了我的rails服务器。

你应该添加

 config.action_mailer.perform_deliveries = true 

因为默认情况下这是错误的,防止邮件从您的开发环境发送…

对于任何不使用smtp的人来说,将交付方式切换到sendmail帮助我除了明确设置要执行的交付之外:

 config.action_mailer.delivery_method = :sendmail 

如果您在从控制台发送电子邮件时遇到问题,则必须在邮件上调用递送方式。

 MyMailer.create_email.deliver 

所以我想通了。 将ActionMailer::Base.delivery_method = :smtp config/environment.rb ActionMailer::Base.delivery_method = :smtp覆盖ActionMailer::Base.delivery_method = :test config/environments/test.rb ActionMailer::Base.delivery_method = :test

所以,从config/environment.rb删除该行, ActionMailer::Base.delivery_method = :smtp ,并将其放在config/environments/production.rb 。 这允许你在config/environments/test.rb放置ActionMailer::Base.delivery_method = :test ,并在config/environments/development.rb放置你想要的版本。 我做了development.rb :test因为我使用Faker填充我的数据库,并将其更改为:smtp所以我确信真正的电子邮件是作为额外的检查发送的。

注意:您必须重新启动服务器才能使这些更改生效。

另一个注意:Heroku当前的SendGrid说明( https://devcenter.heroku.com/articles/sendgrid )将SendGrid Herokuconfiguration代码放在一个新的config/initializers/mail.rb文件中,这可能需要删除最后一行,所需的版本在每个config/environments/[production.rb, development.rb, test.rb]