2017-08-31 14 views
2

例 "in the docs"に続いて、 "標準の"インバウンドメールハンドラを使用して、Google App Engineアプリにインバウンドメールを受信して​​います。Google App Engine pythonインバウンドメールLookupError:不明なエンコード

アプリに送信された電子メールメッセージ(私ではない)が、電子メールAPIがLookupError:未知のエンコード例外をスローする原因になっているようです。トレースバックをご覧ください。

私の知る限りでは、この例外はアプリのメールハンドラが呼び出される前にスローされ、明らかにアプリのコードで捕まえることはできません。これは事実ですか?

App Engineは失敗したメッセージを約40分間隔で再試行して、エラー(警告)を生成し続けているようです。これを中止する方法はありますか?

ありがとうございました。

トレースバック:受信メールハンドラのpostメソッドが呼び出されたときにエラーが起こっている

Traceback (most recent call last): 
    File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1535, in __call__ 
    rv = self.handle_exception(request, response, e) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1529, in __call__ 
    rv = self.router.dispatch(request, response) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1278, in default_dispatcher 
    return route.handler_adapter(request, response) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1102, in __call__ 
    return handler.dispatch() 
    File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 572, in dispatch 
    return self.handle_exception(e, self.app.debug) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 570, in dispatch 
    return method(*args, **kwargs) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/webapp/mail_handlers.py", line 70, in post 
    self.receive(mail.InboundEmailMessage(self.request.body)) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/mail.py", line 939, in __init__ 
    self.update_from_mime_message(mime_message) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/mail.py", line 1513, in update_from_mime_message 
    super(InboundEmailMessage, self).update_from_mime_message(mime_message) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/mail.py", line 1422, in update_from_mime_message 
    super(EmailMessage, self).update_from_mime_message(mime_message) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/mail.py", line 1291, in update_from_mime_message 
    subject = _decode_and_join_header(mime_message['subject'], separator=u'') 
    File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/mail.py", line 597, in _decode_and_join_header 
    for s, charset in email.header.decode_header(header)) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/mail.py", line 597, in 
    for s, charset in email.header.decode_header(header)) 
LookupError: unknown encoding: iso-8859-8-i

答えて

4

File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/webapp/mail_handlers.py", line 70, in post 
    self.receive(mail.InboundEmailMessage(self.request.body)) 

最も簡単な解決策は、トラップにエラーを独自のハンドラでpostメソッドをオーバーライドすることです:

import logging 
from google.appengine.ext.webapp.mail_handlers import InboundMailHandler 


class MyInboundMailHandler(InboundMailHandler): 

    def post(self): 
     try: 
      super(MyInboundMailHandler, self).post() 
     except LookupError as ex: 
      logging.warning('Could not process message because %s.', ex) 

    def receive(self, mail_message): 
     # Process message 

メッセージを失いたくない場合は、カスタムを作成し、登録することができiso-8859-8-iコーデック。これは、十分に文書化されたプロセスではないようですが、これらの質問には、いくつかのヒントを提供します。

How do I properly create custom text codecs?

Custom Python Charmap Codec

how do I write a custom encoding in python to clean up my data?

標準ライブラリのiso-8859-8 encodingは良いテンプレートを提供しています。

+0

ありがとう、最初の措置として、InboundMailHandlerのポストメソッドをオーバーライドします。 iso-8859-8とiso-8859-8-iは、ほんの少しの制御コードでしか違いがないようですが、ほとんどのアプリケーションでは意味がありません。 iso-8859-8-iコーデックが要求されるたびに、実際に新しいコーデック全体を登録することなく、iso-8859-8コーデックの検索を強制する簡単な方法はありますか? – ACEGL

+0

明らかにhttps://stackoverflow.com/a/1064308/5320906 – snakecharmerb

+0

があります。再度、感謝します。 – ACEGL

関連する問題