2012-02-25 49 views
0

看起來像我的電子郵件引發錯誤發送。ActionMailer發送電子郵件,即使它與ArgumentError失敗:發件人需要發送消息

我收到的電子郵件,也是我得到這個錯誤「耙作業:工作」控制檯:

Class#deliver_and_save failed with ArgumentError: A sender (Return-Path, Sender or From) required to send a message - 1 failed attempts

但是當我通過我的調試步驟,我可以看到,有一個from

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

是否有可能ActionMailer拋出錯誤,仍然發送?這是一個已知的問題?我遇到的問題是,delayed_job不斷重複發送電子郵件。

UPDATE:

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 

回答

2

發現問題!

delayed_job不與導軌3.1玩超級好,你就必須使用這個新的語法:

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

自動嘗試郵件:: Message對象是deliver_and_save回報上的調用.deliver。 (所以這是我的問題:試圖調用.deliver自己。)

SOLUTION:我重新安排我的代碼,並在某處調用Email.create(..EmailEngine外面,然後我叫EmailEngine.delay.send(template)直接和完全刪除deliver_and_save

嗚!

btw,在從ActionMailer繼承的類上調用的任何方法將返回一個Mail :: Message對象。 ActionMailer會做一些黑魔法來實現這一點(覆蓋Ruby的method_missing,因此它可以像控制器一樣渲染視圖,儘管它在很多方面表現得像一個模型)。

+0

順便說一句,我找到了一個解決方法,以及:只調用delayed_job的的「延遲」的方法對一類不*不* FROM的ActionMailer繼承和然後從那裏調用你的ActionMailer方法。這就像通過代理方法調用ActionMailer的延遲,並且工作得很好。 – thewillcole 2012-02-29 09:21:20

相關問題