我正在尝试使用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!”) 把“完成发送邮件!” 返回 结束 端
答案 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这样的调试器。它们可以为您节省大量的故障排除时间。