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

Python用imaplib、email读取Gmail邮件主题波兰字符乱码如何解决

乱码问题修复方案

问题原因

直接通过message['subject']获取的邮件头为未解码的Header类型,波兰语等非ASCII字符没有完成转码就会出现乱码。不需要手动配置编码页,Python内置的email工具可以自动识别邮件头携带的编码信息完成解码。

修复步骤

  • 导入email.header模块的decode_header方法
  • 封装通用邮件头解码函数,兼容所有带非ASCII字符的邮件头字段
  • 替换原代码中直接读取subject的逻辑,用解码函数处理

完整修复代码

import imaplib, email
from email.header import decode_header

# 封装通用解码函数
def decode_mail_header(header_value):
    decoded_fragments = decode_header(header_value)
    result = []
    for fragment, encoding in decoded_fragments:
        if isinstance(fragment, bytes):
            # 没有指定编码时默认用utf-8兜底
            result.append(fragment.decode(encoding or 'utf-8'))
        else:
            result.append(fragment)
    return ''.join(result)

mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login('user', 'pwd')
mail.select('inbox')
data = mail.search(None, 'ALL')
_, data = mail.fetch(str(7), '(RFC822)')
message = email.message_from_bytes(data[0][1])
out = {
    'from': message['from'],
    'subject': decode_mail_header(message['subject']),
    'to': message['Delivered-To'],
    'datetime': message['Date'],
    'cc': message['Cc']
}

补充说明

如果后续发现from、cc等其他字段也存在非ASCII字符乱码的情况,直接用同一个decode_mail_header函数处理对应字段即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:15:03