簡體   English   中英

使用Postmarkapp在Rails應用程序中處理電子郵件異常的最佳方法是什么?

[英]What is the best way to handle Email exceptions in a Rails app using Postmarkapp?

我正在使用Postmark來處理我的Rails 3應用程序中的所有電子郵件,使用postmark-rails gem。

偶爾用戶會引入錯誤的電子郵件或不存在的電子郵件,最終會給予硬彈跳。 Postmark::InvalidMessageError引發Postmark::InvalidMessageError錯誤來處理此問題,我的用戶收到的錯誤是非描述性500錯誤。

我想將這些錯誤處理到我的響應界面中,我想知道什么是最好的策略。 我現在有幾個郵件已經有幾十個,所以我不想在所有這些方法中添加begin-raise塊。 將這種開始加注添加到控制器似乎也不是最優雅的解決方案。

我一直在閱讀有關將rescue_from塊添加到我的ApplicationController ,但后來我不知道如何在界面中處理它(可能是通過調用使用errors方法的方法?)

我想在開始管道之前聽聽你的想法。

有任何想法嗎?

我們不得不在Beanstalk中處理同樣的問題。 首先,我們關閉了生產中的“raise_delivery_errors”,然后我們為ActionMailer :: Base實現了一個覆蓋方法,允許我們動態更改該設置以進行特定交付。 像這樣:

AccountMailer.raise_errors do
  AccountMailer.deliver_welcome_email(@account)
end

這使我們能夠控制何時出現交付異常,並避免在此類錯誤打破他們不應該出現的問題時出現問題。 通常只有一兩個地方你想放置那個覆蓋。 在我們的例子中,它是忘記密碼和邀請用戶功能,當讓用戶知道他們的密碼重置電子郵件/邀請沒有交付是至關重要的。 在后台運行的工作中的某個地方有一個交付例外對任何人都沒有幫助。

在我們有了這個之后,我們在我們的ApplicationController中添加了一個rescue_from,它將設置flash [:alert]並重定向回來。

def postmark_delivery_error(exception)
  if address = derive_email_from_postmark_exception(exception)
    link = %Q[<a href="#{ reactivate_email_bounce_path(address)  }">reactivating</a>]
    msg = "We could not deliver a recent message to “#{ address }”. The email was disabled due to a hard bounce or a spam complaint. You can try #{ link } it and try again."
  else
    msg = "We could not deliver a recent message. The email was disabled due to a hard bounce or a spam complaint. Please contact support."
  end
  flash[:alert] = msg
  redirect_to :back
end

reactivate_email_bounce_path鏈接到使用Postmark API重新激活跳出的控制器。 你可以在這里找到更多相關的細節:

http://developer.postmarkapp.com/developer-bounces.html

因此,在您完成所有這些工作之后,您的最終用戶可以在處理交付錯誤方面獲得非常好的體驗,這在Web應用程序中通常無法解決。 在Beanstalk中看起來像這樣:

Beanstalk反應性反彈

不僅用戶可以看到他的電子郵件被反彈,他還可以自己反應:

Beanstalk重新激活反彈

希望這可以幫助。

Ilya Sabanin http://twitter.com/isabanin

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM