Python用html2text解析邮件时传入bytes仍报需类字节对象错误如何解决
问题原因
html2text库的html2text()方法要求输入为字符串类型,你传入的bytes类型会导致库内部字符串替换操作的类型匹配失败,触发TypeError。
修复步骤
- 首先修正邮件对象解析的错误
你当前代码中message = email.message_from_string(str(data[0][1]))存在逻辑问题:data[0][1]本身是bytes类型,直接强转str会将bytes的b''标记带入内容,导致后续解析异常。
修改为:
message = email.message_from_bytes(data[0][1])
- 给HTML字节流做编码解码后再传入html2text
获取邮件内容对应的编码,将bytes解码为字符串后再调用html2text,替换原有调用行:
# 原有代码 # _html = part.get_payload(decode = True) # print(type(_html)) # res['Text'] = html2text.html2text(_html) # 修改为 _html = part.get_payload(decode = True) charset = part.get_content_charset() or 'utf-8' # 优先取邮件声明的编码,无则默认utf-8 _html_str = _html.decode(charset, errors='replace') # 编码错误时用占位符替代避免崩溃 res['Text'] = html2text.html2text(_html_str)
内容的提问来源于stack exchange,提问作者TMac
相关产品推荐
相关产品推荐

