在Heroku上使用MailGun for ruby​​ on rails应用程序

时间:2015-10-03 06:21:36

标签: ruby-on-rails heroku mailgun

我正在尝试使用MailGun在我的Ruby托管应用程序中发送电子邮件。

我将MailGun插件添加到我的heroku应用程序中。我更新了我的config/environments/production.rb,如下所示:

config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    :port           => ENV['MAILGUN_SMTP_PORT'],
    :address        => ENV['MAILGUN_SMTP_SERVER'],
    :user_name      => ENV['MAILGUN_SMTP_LOGIN'],
    :password       => ENV['MAILGUN_SMTP_PASSWORD'],
    :domain         => 'mydomain.herokuapp.com', #mydomain actually contains the realvalue
    :authentication => :plain,
  }

我在app / mailers目录中创建了一个文件:

class ApplicationMailer < ActionMailer::Base
  default from: "myemail@gmail.com"

  def notify_user(user)
    puts "Going to send email!! to"
    puts user
    mail(to: user, subject: "Welcome!")
  end
end

在我的application_controller.rb

我有一个功能:

def notify_people()
    puts "Notify people!"
    ApplicationMailer.notify_user("xyz@gmail.com")
    puts "over"
end

我从其他控制器之一调用notify_people。但是在我的heroku日志中,通知人们!正在印刷,之后什么都没有。我无法理解为什么它无法调用notify_user。

我的notify_user函数是:

类ApplicationMailer&lt;的ActionMailer :: Base的   默认来自:“abcd@gmail.com”   #layout'mailer'   def notify_user(用户)     把“要发送电子邮件!!”     把用户     mail(to:user,subject:“Welcome!”)     把“完成发送邮件!”     返回   结束 端

1 个答案:

答案 0 :(得分:2)

使用.deliver_later

致电邮件
ApplicationMailer.notify_user("xyz@gmail.com").deliver_later

另外,请确保ENV variables are set on Heroku使用您的Mailgun帐户中的详细信息。

编辑:您可能会在致电ApplicationMailer时收到例外情况。理想情况下,您应该在开发过程中对其进行故障排除,但如果需要,您可以在production.rb中添加:config.action_mailer.raise_delivery_errors = true,以便了解正在发生的事情。

切向,而不是print语句,请查看像byebug和pry-byebug这样的调试器。它们可以为您节省大量的故障排除时间。