當通過actionmailer發送郵件時,actionmailer會從SMTP服務器收到響應,當它正常或錯誤時。發送郵件後是否有辦法檢索此響應? 也當SMTP服務器沒有引發錯誤?Actionmailer SMTP服務器響應
我們的qmail郵件服務器會拋出一個我們想用來跟蹤電子郵件的處理程序ID。
作爲一個例子,服務器的響應是這樣的:
250 OK 1308235825 QP 17832
當通過actionmailer發送郵件時,actionmailer會從SMTP服務器收到響應,當它正常或錯誤時。發送郵件後是否有辦法檢索此響應? 也當SMTP服務器沒有引發錯誤?Actionmailer SMTP服務器響應
我們的qmail郵件服務器會拋出一個我們想用來跟蹤電子郵件的處理程序ID。
作爲一個例子,服務器的響應是這樣的:
250 OK 1308235825 QP 17832
綜觀源可以定義觀察者:
# Register an Observer which will be notified when mail is delivered.
# Either a class or a string can be passed in as the Observer. If a string is passed in
# it will be <tt>constantize</tt>d.
def register_observer(observer)
delivery_observer = (observer.is_a?(String) ? observer.constantize : observer)
Mail.register_observer(delivery_observer)
end
所以你可以在初始化文件中使用這樣的代碼:
class MailObserver
def self.delivered_email(message)
logger_info "Sent Message: #{message}"
end
end
ActionMailer::Base.register_observer(MailObserver)
這將記錄發送的郵件,並且您可以看到是否可以從發送的郵件對象獲取標題或響應。
在smtp設置中設置return_response: true
並且調用message.deliver!
而不是deliver
。這將返回SMTP服務器響應,一個Net::SMTP::Response
,其中包含您正在查找的服務器響應。
如果您需要記錄與服務器連接的所有響應,而不僅僅是最終結果,則需要深入到Net :: SMTP。
非常感謝! – JCorcuera 2013-08-15 05:45:33
這打破了我的一些測試,因爲它改變了返回對象的類。 return_response爲true時應如何更改/覆蓋測試中的返回值? – duleorlovic 2014-06-09 16:42:04
@duleorlovic取決於你的測試的目的不是。基本上,如果你調用爆炸形式'deliver!',你應該處理一個'Net :: SMTP :: Response'作爲結果。 'result.success?'是一個很好的例子,你可以使用。請參閱http://ruby-doc.org/stdlib-2.0.0/libdoc/net/smtp/rdoc/Net/SMTP/Response.html – tribalvibes 2014-06-10 19:48:46
嗯,我想從服務器的所有響應,即使沒有錯誤。我們的qmail郵件服務器會拋出一個我們想用來跟蹤電子郵件的處理程序ID。 – 2011-06-17 07:34:52
更新了我的答案。看看是否有更好的方法。 – 2011-06-17 17:21:23