为什么邮件不发送任何邮件? (或者任何调试的想法?)
在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服务器。
答案 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
。它想告诉您一些事情,但是不能。