Rails 4的ActionMailer无法发送邮件。

4

我已经尝试了所有能想到的方法来让Rails 4.1.6(本地开发环境)发送电子邮件,但均无果。我在development.rb和application.rb中使用Postmark,内容如下:

config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
config.action_mailer.delivery_method = :postmark
config.action_mailer.postmark_settings = { :api_key => API_KEY }
config.action_mailer.perform_deliveries = true

对于GMAIL,我尝试了:
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
config.action_mailer.perform_deliveries = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  address:              'smtp.gmail.com',
  port:                 587,
  domain:               'gmail.com',
  user_name:            'my_email',
  password:             'my_password',
  authentication:       'plain',
  enable_starttls_auto: true  }

我的邮件类看起来像这样:

class BusinessMailer < ActionMailer::Base
  default from: "my_email@email.com"

  def claim_business business

    mail(
      :subject => 'hello',
      :to      => 'myemail@email.com',
      :from    => 'myemail@email.com',
      :html_body => '<strong>Hello John Doe<strong>',
      :track_opens => 'true'
    )

  end
end

最后我通过以下方式发送电子邮件:BusinessMailer.claim_business @business 当我触发claim_business方法时,在控制台中看到BusinessMailer#claim_business: processed outbound mail in 14.1ms,没有错误信息。 有人可以告诉我这里缺少什么吗?

1
添加 config.action_mailer.raise_delivery_errors = true 然后看看会发生什么。 - blelump
1
@blelump 我有这个,但没有任何额外的输出到控制台,只有标准的“处理出站邮件”。 - Dan Ramos
2
好的,那么这个怎么样:BusinessMailer.claim_business(@business).deliver - blelump
@blelump 我应该在3小时前发布这个问题!它起作用了,如果你想把你的评论作为答案添加,我会给你信用。感谢你的帮助! - Dan Ramos
@DanRamos 调用 .deliver 是解决方案吗?我也遇到了同样的问题,但我肯定调用了 .deliver... 实际上,现在应该使用 .deliver_now - Jeff
@Jeff 现在,.deliver_now不起作用,rails显示此错误:undefined method `deliver_now'。 - Paco Gómez Capón
1个回答

18

您缺少deliver方法来最终发送电子邮件。请尝试:

BusinessMailer.claim_business(@business).deliver

2
谢谢。似乎有所改变。我的传递方法在ActionMailer类中。它一直发送正常 - 然后我升级到4.2.3,它就悄无声息地失败了。将其放入调用类中解决了这个问题。 - Tim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接