【问题标题】:Rails Error Checking for Email Delivery - deliver_now [duplicate]Rails 错误检查电子邮件传递 - 传递_now [重复]
【发布时间】:2016-01-05 02:51:11
【问题描述】:

我应该如何包装deliver_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

【问题讨论】:

    标签: ruby-on-rails-4 error-handling try-catch email-delivery


    【解决方案1】:

    确保您在应用程序配置中设置了config.action_mailer.raise_delivery_errors = true。然后,您可以使用救援块捕获异常。像这样的:

    @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_mailer.raise_delivery_errors = true配置。有没有办法为这种交付提出例外。现在交付!完成这个?
    • 我正在寻找 Deliver_now 的来源!在api.rubyonrails.org/classes/ActionMailer/…def deliver_now! processed_mailer.handle_exceptions do message.deliver! end end 它仍然包含在handle_exceptions 中,唯一的区别似乎是调用message.deliver! 与没有爆炸。不确定这是否足以引发异常?
    • @BrianC - 如果您担心遗留代码的意外后果,一种方法可能是:1)设置raise_delivery_errors = true。 2) 在您的邮件中,添加类似rescue_from StandardError, with: :handle_mailer_error 的内容。 3) 实施handle_mailer_error 以便有条件地重新提出它们,如果它们是您感兴趣的,否则只需记录它们,一切都会像往常一样工作。还要问自己为什么只想为一封特定的电子邮件提出例外。如果您正在调试交付问题,也许您只需要更改日志级别并阅读日志即可。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    相关资源
    最近更新 更多