4

我在使用 ActionMailer 实施延迟作业时遇到问题:延迟作业实施之前:

class NotificationsMailer < ActionMailer::Base

  default :from => "noreply@mycompany.com"
  default :to => "info@mycompany.com"

  def new_message(message)
    @message = message
    mail(:subject => "[Company Notification] #{message.subject}")
  end

end

并使用这条线调用它(它工作得很好):

NotificationsMailer.new_message(@message).deliver

在延迟作业实施之后,我所做的只是将交付线更改为:

NotificationsMailer.delay.new_message(@message)

另外,我使用

rake jobs:work

如果作业已关闭,我可以看到数据库中的对象,并且我可以看到它们在我启动工作人员后被弹出,但没有任何反应(没有发送电子邮件)。

更新 - 其他延迟任务(与邮件无关)工作正常。

任何人都可以帮助新手吗?

提前致谢!!

4

2 回答 2

5

我花了很多时间使用延迟的工作发送电子邮件,最后它起作用了。

在宝石文件中

gem 'delayed_job'
gem 'delayed_job_active_record'

在控制器中

 def dtest

    UserMailer.delay.welcome_email
    render json:"Succes"
    return
 end

在邮件中

class UserMailer < ActionMailer::Base
  default from: "from@example.com"

  def welcome_email
    ActionMailer::Base.delivery_method = :smtp 
        ActionMailer::Base.smtp_settings = {
                address: "smtp.gmail.com", 
                port: 587, 
                domain: 'gmail.com',
                Authentication: "plain", 
                enable_starttls_auto: true, 
                user_name: 'your@gmail.com',
                password: 'yourpassword'
            }

    mail(to: 'no-reply@gmail.com', subject: 'Background Email Test').deliver

  end

end

在此之后,我只是启动 Rails 服务器并开始工作

rake jobs:work

我希望,它会对你们有所帮助,并且使用“延迟作业”发送电子邮件可以正常工作:)

于 2014-11-18T12:15:07.983 回答
1

我首先要看的是你环境中的 smtp 设置,检查以确保它是正确的:

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => "gmail.com",
:authentication => 'plain',
:enable_starttls_auto => true,
:user_name => "youremail@gmail.com",
:password => "yourpassword"
}
config.action_mailer.default_charset = "utf-8"
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true

我使用旧的 ruby​​,1.8.7 和 rails 2.3.8,所以请检查以确保语法也正确。

于 2013-10-15T21:45:56.857 回答