You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python加载邮件时出现异常消息体问题求助

解决Python加载长邮件时出现Base64编码内容的问题

嘿,这个问题我太熟悉了!你看到的那些类似PGRpdj48c3BhbiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojZmZmZmZmO2NvbG9yOiMwMDAwMDA7...的字符,其实是Base64编码的邮件正文,并不是什么错误乱码。

为什么短邮件正常,长邮件出问题?

短邮件通常会采用7-bit纯文本或者quoted-printable编码,这种编码的内容直接转UTF-8就能正常显示。但长邮件(尤其是包含特殊字符、HTML格式的邮件)为了避免传输过程中出现字符损坏,会自动切换成Base64编码格式——这种编码把二进制数据转换成ASCII字符,兼容性更强,但直接转UTF-8就会显示成你看到的那种“乱码”。你看到的结尾==是Base64的标准填充字符,用来补全编码后的字节长度。

正确的解决方案:用Python内置的email库解析邮件

不要手动去解码原始字节,Python的email模块已经帮我们处理了所有编码和多部分邮件的逻辑。修改你的代码如下:

import imaplib
from email import policy
from email.parser import BytesParser

session = imaplib.IMAP4_SSL(host_in, port_in)
session.login(login, password)
session.select('Inbox')
_response_status, response_body = session.search(None, '(UNSEEN)')
msg_id_list = response_body[0].split()
result = []

for msg_id in msg_id_list:
    _response_status, response_body = session.fetch(msg_id, '(RFC822)')
    # 用BytesParser解析完整的原始邮件数据
    msg = BytesParser(policy=policy.default).parsebytes(response_body[0][1])
    
    # 处理多部分邮件(大部分现代邮件都是多部分的,比如同时包含纯文本和HTML)
    if msg.is_multipart():
        for part in msg.walk():
            # 获取纯文本正文
            if part.get_content_type() == 'text/plain':
                plain_body = part.get_content()
                print("纯文本正文:")
                print(plain_body)
            # 如果需要HTML格式的正文,可以添加这个分支
            elif part.get_content_type() == 'text/html':
                html_body = part.get_content()
                print("HTML正文:")
                print(html_body)
    else:
        # 非多部分邮件直接获取内容
        body = msg.get_content()
        print("邮件正文:")
        print(body)

代码关键点说明

  • BytesParser(policy=policy.default):使用现代的解析策略,能更好地处理各种邮件格式和编码,避免旧策略的兼容性问题。
  • get_content():这个方法会自动识别邮件的编码格式(Base64、quoted-printable等),并帮你解码成可读的文本,不用手动处理Base64解码。
  • msg.walk():遍历邮件的所有部分,处理包含多个内容块的多部分邮件(比如带附件、同时有纯文本和HTML的邮件)。

这样修改后,不管是短邮件还是长邮件,都能正确显示可读的正文内容啦!

内容的提问来源于stack exchange,提问作者user2626972

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:10:18