email.retr在邮件正文含中文时获取奇怪的=20字符

4 投票
2 回答
9560 浏览
提问于 2025-04-11 18:41
    self.logger.info(msg)
    popinstance=poplib.POP3(self.account[0])
    self.logger.info(popinstance.getwelcome())
    popinstance.user(self.account[1])
    popinstance.pass_(self.account[2])
    try:
        (numMsgs, totalSize)=popinstance.stat()
        self.logger.info("POP contains " + str(numMsgs) + " emails")
        for thisNum in xrange(1, numMsgs + 1):
            try:
                (server_msg, body, octets)=popinstance.retr(thisNum)
            except:
                self.logger.error("Could not download email")
                raise
            text="\n".join(body)
            mesg=StringIO.StringIO(text)
            msg=rfc822.Message(mesg)
            MessageID=email.Utils.parseaddr(msg["Message-ID"])[1]
            self.logger.info("downloading email " + MessageID)
            emailpath=os.path.join(self._emailpath + self._inboxfolder + "\\" + self._sanitize_string(MessageID  + ".eml"))
            emailpath=self._replace_whitespace(emailpath)
            try:
                self._dual_dump(text,emailpath)
            except:
                pass
            self.logger.info(popinstance.dele(thisNum))
    finally:
        self.logger.info(popinstance.quit())

当使用popinstance.retr(thisNum)这个方法时,如果邮件里有中文字符,返回的内容会在邮件正文中显示为=20。

我该怎么处理这个问题呢?

邮件的原始文本如下:

主题: (B/L:4363-0192-809.015) SI FOR 15680XXXX436

=20

亲爱的

=20

附上SI

请把提单草稿和借记通知发给我们

=20

谢谢

=20

MYRI

----- 原始邮件 -----=20

2 个回答

5

使用 quopri 这个模块来解码字符串。

9

这可能是一个空格字符,用了一种叫做quoted-printable的编码方式。

撰写回答