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]