当通过 actionmailer 发送邮件时,actionmailer 会从 SMTP 服务器获得响应,无论是正常还是错误。有没有办法在发送邮件后检索此回复?另外,当 SMTP 服务器没有抛出错误时?
我们的 qmail 邮件服务器会抛出一个处理程序 ID,我们想用它来跟踪电子邮件。
例如,服务器响应是这样的:
250 好 1308235825 qp 17832
当通过 actionmailer 发送邮件时,actionmailer 会从 SMTP 服务器获得响应,无论是正常还是错误。有没有办法在发送邮件后检索此回复?另外,当 SMTP 服务器没有抛出错误时?
我们的 qmail 邮件服务器会抛出一个处理程序 ID,我们想用它来跟踪电子邮件。
例如,服务器响应是这样的:
250 好 1308235825 qp 17832
return_response: true
在 smtp 设置中设置并调用而message.deliver!
不是deliver
. 这将返回 SMTP 服务器响应 a Net::SMTP::Response
,其中包含您要查找的服务器响应。
如果您需要与服务器连接的所有响应的日志,而不仅仅是最终结果,您需要深入研究 Net::SMTP。
查看源代码,您可以定义一个观察者:
# 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)
这将记录发送的邮件,您可以查看是否可以从发送的邮件对象中获取标题或响应。