【问题标题】:How to parse inbound GAE email manually?如何手动解析入站 GAE 电子邮件?
【发布时间】:2013-04-16 17:53:27
【问题描述】:

由于我 having problems 在电子邮件主题为 UTF-8 编码时具有标准 GAE 的电子邮件功能,因此我正在尝试手动处理:

msg_encoding = self.request.headers['Content-Type'].split('charset=')[1] # message/rfc822; charset=UTF-8
msg = email.message_from_string(self.request.body)
if msg:
    logging.debug(msg.get_content_charset()) # None
    logging.debug(msg['to'])
    logging.debug(msg['from'])
    logging.debug(msg['Subject'].decode(msg_encoding))

我做对了吗?我应该解码主题吗?还是由邮件解析器自动完成?

【问题讨论】:

    标签: python google-app-engine email python-2.5


    【解决方案1】:

    以下简化代码(纯文本/纯文本,无附件)对我很有效:

    class InboundMailHandler(InboundMailHandler):
        def post(self):
            msg = email.message_from_string(self.request.body)
            if msg:
                charset = 'utf-8'
                from_realname, from_emailaddr = email.utils.parseaddr(msg['from'])
                to_realname, to_emailaddr = email.utils.parseaddr(msg['to'])
                # parse e-mail body, look for text/plain part only
                body = ''
                if msg.is_multipart():
                    for part in msg.walk():
                        if part.get_content_type() and part.get_content_type()=='text/plain': # ignore text/html
                            charset = part.get_content_charset()
                            body = part.get_payload(decode=True).decode(part.get_content_charset())
                else:
                    body = msg.get_payload(decode=True)
                    body = body.decode('utf-8')
                subject, encoding = email.header.decode_header(msg['subject'])[0]
                if encoding != None:
                    subject = subject.decode(encoding)
                else:
                    subject = subject.decode('utf-8')
    

    【讨论】:

    • 我们如何处理存在附件的情况?我无法解码附件。我的意图是将邮件附件上传到 blobstore。你能帮我完成这项工作吗?提前致谢。
    • @sufinsha,我正在考虑将附件保存到 blobstore,但还没有编码,所以在这里无法帮助您...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    • 2012-07-11
    • 1970-01-01
    • 2019-07-08
    • 2011-02-13
    相关资源
    最近更新 更多