Ruby on rails 4 Rails检查电子邮件发送错误-立即发送

Ruby on rails 4 Rails检查电子邮件发送错误-立即发送,ruby-on-rails-4,error-handling,try-catch,email-delivery,Ruby On Rails 4,Error Handling,Try Catch,Email Delivery,我应该如何包装一个deliver\u now方法调用,以便在传递过程中发现错误 @user = User.new(user_params) if @user.valid? MyMailer.user_email(@user).deliver # hmmm.... how do we catch if the email is not sent? else ... end 确保在应用程序配置中设置了config.action\u mailer.raise\u delivery\

我应该如何包装一个
deliver\u now
方法调用,以便在传递过程中发现错误

@user = User.new(user_params)
if @user.valid?
  MyMailer.user_email(@user).deliver
  # hmmm....  how do we catch if the email is not sent?  
else
  ...
end

确保在应用程序配置中设置了
config.action\u mailer.raise\u delivery\u errors=true
。然后,您可以通过一个rescue块捕获异常。大概是这样的:

@user = User.new(user_params)
if @user.valid?
  begin
    MyMailer.user_email(@user).deliver
  rescue StandardError => e
    # do something with the messages in exception object e
    flash[:error] = 'Problems sending email'
  end
else
  ...
end

我遇到的情况是,一个非常大的应用程序有很多使用邮件程序的遗留代码,并且不希望它引发异常,因此我无法在配置中启用action\u mailer.raise\u delivery\u errors=true。是否有方法仅针对此交付提出例外情况。你现在有空吗!完成这项任务?我现在正在寻找你的来源!在
def中立即交付!已处理\u mailer.handle\u异常do message.deliver!end end
它仍然包装在句柄中,唯一的区别似乎是调用
message.deliver没有爆炸的vs。不确定这是否足以引发异常?@BrianC-如果您担心遗留代码的意外后果,一种方法可能是:1)设置
raise\u delivery\u errors=true
。2) 在您的邮件程序中,使用::handle\u mailer\u error
添加类似于
rescue\u from StandardError的内容。3) 实现
handle\u mailer\u error
,这样,如果您感兴趣,它会有条件地重新引发它们,否则只需记录它们,一切都会像往常一样正常工作。还要问问自己,为什么只针对一封特定的电子邮件提出例外。如果调试交付问题,可能只需要更改日志级别并读取日志。