【问题标题】:Delayed Jobs and Action Mailer延迟作业和操作邮件程序
【发布时间】:2013-01-10 22:14:52
【问题描述】:

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

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

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

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

提前致谢!!

【问题讨论】:

  • 你在工作开发环境吗?查看配置,也许 action_mailer 设置为 false,config.action_mailer.perform_deliveries = false
  • 这不是问题,因为它设置为 true。谢谢!

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


【解决方案1】:

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

在宝石文件中

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

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

【讨论】:

  • 请注意,这种方法适用于 Rails v.
  • 还需要运行生成器和迁移:rails g delayed_job:active_recordrake db:migrate
【解决方案2】:

我首先要看的是你的环境中的 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,因此请检查以确保语法也正确。

【讨论】:

  • 为什么config.action_mailer.raise_delivery_errors = true 被列出两次?
  • @JakeGould:我已经编辑了双胞胎config.action_mailer.raise_delivery_errors
猜你喜欢
  • 2011-09-15
  • 1970-01-01
  • 2016-03-29
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
  • 2011-12-14
  • 2022-11-10
  • 1970-01-01
相关资源
最近更新 更多