Rails:延迟作业-> 发送异步邮件时未接收“来自”字段

Posted

技术标签:

【中文标题】Rails:延迟作业-> 发送异步邮件时未接收“来自”字段【英文标题】:Rails: Delayed Job --> Not picking up 'from' field when sending asynchronous mail 【发布时间】:2011-05-17 21:34:07 【问题描述】:

我正在运行 2.1.1、Rails 3,并且有很长时间才能让 delay_job gem 正常工作。如果我在邮件程序上删除 handle_asynchronously,一切正常......但如果我把它放回去,我会得到:

nil:NilClass 的未定义方法 `name'(其中 'name' 来自 @contact.name ...在禁用 handle_asynchronously 时可以正常工作)。

如果我去掉所有@contact 模板信息,我会得到:

“发送消息所需的发件人(返回路径、发件人或发件人)”?

这是我做错了什么还是某种错误?相关代码如下(my@email.here 替换为合法邮箱地址)

class ContactMailer < ActionMailer::Base
  default :from => "my@email.here"  

  def contact_mail(contact)
    @contact = contact
    mail(:to => ENV['MANAGER_EMAIL'], :subject => 'Delayed Job Test', :from => 'my@email.here', :content_type => 'text/plain')
  end

  handle_asynchronously :contact_mail, :run_at => Proc.new  2.seconds.from_now 
end

非常感谢任何建议。

【问题讨论】:

【参考方案1】:

Rails 3 邮件程序

由于邮件程序在 Rails 3 中的实现方式,我们必须做一些工作才能让 delay_job 工作。

# without delayed_job
Notifier.signup(@user).deliver

# with delayed_job
Notifier.delay.signup(@user)

删除.deliver 方法以使其工作。这并不理想,但这是我们目前能做的最好的了

https://github.com/collectiveidea/delayed_job#rails-3-mailers

【讨论】:

【参考方案2】:

我遇到了同样的问题并通过删除此行解决了它:

default :from => "my@email.here" 

但我不知道为什么它与这条线崩溃..

【讨论】:

【参考方案3】:

尝试使用实际的电子邮件地址调用该方法:

def contact_mail(contact_email)
  mail(:to => ENV['MANAGER_EMAIL'], :subject => 'Delayed Job Test', :from => contact_email, :content_type => 'text/plain')
end

这是我唯一能想到的,在没有看到您的实际代码的情况下可能会有所帮助。你的错误说你在一个 nil 对象上调用 name,但我看不到你在哪里调用 .name...

【讨论】:

以上是关于Rails:延迟作业-> 发送异步邮件时未接收“来自”字段的主要内容,如果未能解决你的问题,请参考以下文章

Rails/Rspec:测试延迟作业邮件

如何使 ExceptionNotifier 在 Rails 3 中与延迟作业一起使用?

Ruby on Rails:延迟的作业无法使用邮件程序并给出路由错误

延迟作业无法在 Rails 应用程序中发送电子邮件。

Sidekiq Rails 4.2使用活动作业还是工作者?有什么不同

使用延迟作业发送电子邮件时报告错误