延迟工作和行动邮件

时间:2013-01-27 12:38:28

标签: ruby-on-rails actionmailer delayed-job

我在使用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

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

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

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

提前致谢!!

2 个答案:

答案 0 :(得分:5)

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

在Gem文件中

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

我希望,它会帮助你们和电子邮件发送工作正常使用“延迟工作”#39; :)

答案 1 :(得分: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,所以请检查以确保语法正确。

相关问题