【问题标题】:Google App Engine python inbound mail LookupError: unknown encodingGoogle App Engine python 入站邮件 LookupError:未知编码
【发布时间】:2017-08-31 19:05:51
【问题描述】:

我正在使用“标准”入站邮件处理程序接收到我的 Google App Engine 应用程序的入站电子邮件,遵循示例 in the docs

似乎发送到应用程序(不是我)的某封电子邮件导致电子邮件 api 抛出 LookupError: unknown encoding 异常。请查看回溯。

据我所知,此异常是在调用应用程序的邮件处理程序之前引发的,显然无法被应用程序的代码捕获和处理。真的是这样吗?

App Engine 似乎每隔大约 40 分钟重试失败的消息,这会继续产生错误(和警报......)有什么办法可以中止这个吗?

感谢您的帮助。

追溯:

Traceback(最近一次调用最后一次):
  __call__ 中的文件“/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py”,第 1535 行
    rv = self.handle_exception(请求,响应,e)
  __call__ 中的文件“/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py”,第 1529 行
    rv = self.router.dispatch(请求,响应)
  文件“/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py”,第 1278 行,在 default_dispatcher
    返回 route.handler_adapter(请求,响应)
  __call__ 中的文件“/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py”,第 1102 行
    返回 handler.dispatch()
  文件“/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py”,第 572 行,在调度中
    return self.handle_exception(e, self.app.debug)
  文件“/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py”,第 570 行,在调度中
    返回方法(*args, **kwargs)
  文件“/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/webapp/mail_handlers.py”,第 70 行,在帖子中
    self.receive(mail.InboundEmailMessage(self.request.body))
  文件“/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/mail.py”,第 939 行,在 __init__
    self.update_from_mime_message(mime_message)
  文件“/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/mail.py”,第 1513 行,在 update_from_mime_message
    超级(InboundEmailMessage,自我).update_from_mime_message(mime_message)
  文件“/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/mail.py”,第 1422 行,在 update_from_mime_message
    super(EmailMessage, self).update_from_mime_message(mime_message)
  文件“/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/mail.py”,第 1291 行,在 update_from_mime_message
    主题 = _decode_and_join_header(mime_message['subject'], separator=u'')
  _decode_and_join_header 中的文件“/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/mail.py”,第 597 行
    对于 s,email.header.decode_header(header) 中的字符集)
  文件“/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/mail.py”,第 597 行,在
    对于 s,email.header.decode_header(header) 中的字符集)
LookupError:未知编码:iso-8859-8-i

【问题讨论】:

    标签: python google-app-engine google-cloud-platform


    【解决方案1】:

    当调用入站邮件处理程序的post 方法时发生错误。

      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 提供了很好的模板。

    【讨论】:

    • 非常感谢,作为第一个措施,我将按照您的建议覆盖 InboundMailHandler post 方法。似乎 iso-8859-8 和 iso-8859-8-i 仅在一些控制代码上有所不同,对于大多数应用程序来说可能没有意义。是否有任何简单的方法可以在请求 iso-8859-8-i 编解码器时强制查找 iso-8859-8 编解码器,而无需实际注册全新的编解码器?
    • 太棒了。再次感谢。
    猜你喜欢
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 1970-01-01
    • 2019-03-06
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    相关资源
    最近更新 更多