2011-03-08 65 views
2

我正在開發一個帶有GAE的投票應用程序,它涉及向每個選民發送電子郵件。在我最初的測試,我去了每分鐘電子郵件配額,而這個異常發生:帶有GAE和每分鐘配額的批量電子郵件

OverQuotaError: The API call mail.Send() required more quota than is available. 

我能夠通過啓用結算,這大大增加了每分鐘電子郵件配額來解決這個短期的,但什麼纔是防止將來出現這種例外的正確方法?如果我的應用程序變得非常成功並且超出了更大的配額,那麼引發此異常將會是一個大問題。

我不想讓電話嘗試發送電子郵件,除了阻止,因爲這是在處理表單後完成的,並且我不希望用戶等待回覆POST 。

這是一個很好的任務隊列用例嗎?如果是這樣,我是否會請求在任務隊列中發送一批電子郵件,或者每次發送電子郵件的請求都會進入任務隊列中?前者似乎更好,因爲處理POST會更快。無論我採取哪種方式,我會在發送每封電子郵件之間添加一段延遲時間,以確保它們不會發送得很快,而且我超過了配額?

回答

3

是的,非常適合任務隊列,你一方面可以限制你的電子郵件是通過在queue.yaml中更改屬性的送出率

每個任務

一個電子郵件是最好的,所以如果任務失敗並重試它只會重試失敗的不是所有批次

+0

請注意,此解決方案僅適用於從管理員發送的情況。您不能代表您的用戶從任務隊列發送電子郵件。 – speedplane 2011-04-27 03:24:06

+0

哇,實際上從任務隊列發送電子郵件的規則不同於響應http請求的代碼嗎? – Daniel 2012-05-31 08:19:26

0

是的。使用任務隊列。如果任務正在發送電子郵件,則可以決定每分鐘應運行多少個任務。如果任務失敗,它將重試執行。