9

当通过 actionmailer 发送邮件时,actionmailer 会从 SMTP 服务器获得响应,无论是正常还是错误。有没有办法在发送邮件后检索此回复?另外,当 SMTP 服务器没有抛出错误时?

我们的 qmail 邮件服务器会抛出一个处理程序 ID,我们想用它来跟踪电子邮件。

例如,服务器响应是这样的:

250 好 1308235825 qp​​ 17832

4

2 回答 2

8

return_response: true在 smtp 设置中设置并调用而message.deliver!不是deliver. 这将返回 SMTP 服务器响应 a Net::SMTP::Response,其中包含您要查找的服务器响应。

如果您需要与服务器连接的所有响应的日志,而不仅仅是最终结果,您需要深入研究 Net::SMTP。

于 2013-03-02T10:37:10.973 回答
2

查看源代码,您可以定义一个观察者:

base.rb中

  # 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)

这将记录发送的邮件,您可以查看是否可以从发送的邮件对象中获取标题或响应。

于 2011-06-16T16:16:02.463 回答