【问题标题】:ActionMailer sends emails even though it failed with ArgumentError: A sender required to send a messageActionMailer 发送电子邮件,即使它因 ArgumentError 失败:需要发送消息的发件人
【发布时间】:2012-07-13 14:53:39
【问题描述】:

看起来我的电子邮件引发了错误并且正在发送。

我正在接收电子邮件,并且在“rake jobs:work”控制台上收到此错误:

Class#deliver_and_save 因 ArgumentError 失败:发送消息所需的发件人(返回路径、发件人或发件人) - 1 次失败尝试

但是当我单步调试调试器时,我可以看到 from:

> email.from
=> ["my@email.com"]
> email_draft.From
=> Me <my@email.com>
> email_draft.sender
=> nil
> email_draft.Sender
=> nil
> email_draft.reply_to
=> ["my@email.com"]

ActionMailer 是否有可能抛出错误并仍在发送?这是一个已知的问题?我遇到的问题是delayed_job不断重复发送电子邮件。

更新:

def EmailEngine < ActionMailer::Base

  # Called with EmailEngine.delay.deliver_and_save(template)
  def deliver_and_save(template)

    # This appears to be raising the error
    email_draft = EmailEngine.send(template) # this will invoke 'mail'

    # Saved here to have a better record than the logs provide
    Email.create(...

    # Yet this still sends
    email_draft.deliver

【问题讨论】:

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


    【解决方案1】:

    找到问题了!

    delayed_job 在 Rails 3.1 中表现不佳,您必须使用这种新语法:

    EmailEngine.delay.deliver_and_save(template) # I was already doing this.
    

    自动尝试在deliver_and_save 返回的Mail::Message 对象上调用.deliver。 (所以这是我的问题:我自己尝试打电话给.deliver。)

    解决方案:我重新安排了我的代码并在EmailEngine 之外的某个地方调用Email.create(..,然后我直接调用EmailEngine.delay.send(template) 并完全删除了deliver_and_save

    哇!

    顺便说一句,在继承自 ActionMailer 的类上调用的任何方法都将返回 Mail::Message 对象。 ActionMailer 使用了一些黑魔法来实现这一点(覆盖 Ruby 的 method_missing,因此它可以像控制器一样渲染视图,尽管它在许多方面表现得像一个模型)。

    【讨论】:

    • 顺便说一句,我也找到了一种解决方法:只需在一个 not 从 ActionMailer 继承的类上调用延迟作业的“延迟”方法,然后调用您的 ActionMailer 方法那里。这就像通过代理方法在 ActionMailer 上调用延迟一样,效果很好。
    【解决方案2】:

    这是关于delayed_job 和rails-3-mailer:https://github.com/collectiveidea/delayed_job#rails-3-mailers

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-09
      • 1970-01-01
      • 1970-01-01
      • 2017-12-08
      • 1970-01-01
      • 2020-09-16
      • 1970-01-01
      相关资源
      最近更新 更多