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

时间:2013-12-25 06:08:47

标签: ruby-on-rails ruby-on-rails-4 actionmailer

为什么邮件不发送任何邮件? (或者任何调试的想法?)

在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='***'

当我在终端中运行$ env时,我发现两个环境变量都已正确设置。

我还重启了我的rails服务器。

5 个答案:

答案 0 :(得分:105)

你应该添加

config.action_mailer.perform_deliveries = true

默认情况下为false,阻止从开发环境发送邮件...

答案 1 :(得分:10)

对于没有使用smtp的人来说,将发送方式切换为sendmail除了明确设置要执行的交付外,还帮助我:

config.action_mailer.delivery_method = :sendmail

答案 2 :(得分:9)

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

MyMailer.create_email.deliver

答案 3 :(得分:0)

所以我已经明白了。让ActionMailer::Base.delivery_method = :smtp中的行config/environment.rb覆盖ActionMailer::Base.delivery_method = :test中的config/environments/test.rb

因此,请从ActionMailer::Base.delivery_method = :smtp删除该行config/environment.rb并将其放入config/environments/production.rb。这样,您就可以在ActionMailer::Base.delivery_method = :test中放置config/environments/test.rb,并在config/environments/development.rb中放置所需的版本。当我使用Faker填充数据库并将其更改为development.rb时,我创建了:test :smtp,因此我确信真正的电子邮件是作为附加检查发送的。

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

另一个注意事项:Heroku当前的SendGrid指令(https://devcenter.heroku.com/articles/sendgrid)将SendGrid Heroku配置代码放在一个新的config/initializers/mail.rb文件中,该文件可能需要删除其最后一行并在每个{{1}中放置所需的版本}}

答案 4 :(得分:0)

所有这些答案都是不错的选择,但是在另一个地方,您可能会被烫伤,特别是在调试的情况下。

development.rb中,请确保您设置了config.action_mailer.raise_delivery_errors = true

如果您的.deliver方法似乎没有问题,但实际上您从未真正通过电传收到电子邮件,则您的发送方法可能会引发异常,并且Rails会吞下该错误。如果您只是因为配置错误的凭据或aws访问被拒绝的API错误之类的简单问题而已,这就是真的。节省扯掉头发,并确保已打开raise_delivery_errors。它想告诉您一些事情,但是不能。