如何解码IMAP获取的邮件主题为客户端可读格式?
解决邮件主题解码与UID获取错误问题
一、解码MIME编码的邮件主题
你看到的=?utf-8?B?0LfQsNGP0LLQutCwIDIxXzE0MTIyMg==?=是MIME Base64编码的主题,Python的email模块自带解码工具,直接对my_msg['subject']变量处理即可:
首先导入所需模块,然后替换原主题打印代码:
import email.header # 新增导入 # 替换原print("subj:", my_msg['subject'])的代码块 encoded_subject = my_msg['subject'] decoded_parts = email.header.decode_header(encoded_subject) subject = '' for part, encoding in decoded_parts: if isinstance(part, bytes): # 按指定编码解码字节内容,默认用utf-8兜底 subject += part.decode(encoding or 'utf-8') else: # 已经是字符串直接拼接 subject += part print("subj:", subject)
这段代码会自动识别编码格式,输出和邮件客户端一致的正常主题样式。
二、修复UID Fetch的"can't concat int to bytes"错误
错误根源是govno是整数类型,而imaplib的uid()方法要求邮件ID必须是字节串或字符串,只需把整数转成对应类型即可:
方式1:转成字节串
govno = 123 # 假设这是最新邮件的UID整数 yek, do = suka.uid('fetch', str(govno).encode(), '(RFC822)')
方式2:直接传字符串
govno = 123 yek, do = suka.uid('fetch', str(govno), '(RFC822)')
两种写法都能解决类型不兼容的问题。
内容的提问来源于stack exchange,提问作者Fareed
相关产品推荐
相关产品推荐

