在网上找到的案例代码都是使用
msg = email.message_from_string(data[0][1].decode('utf-8')) # 转换为email.message对象
今天其中一个邮件遇到报错 'utf-8' codec can't decode byte 0xcc in position 6: invalid continuation byte’
于是用
charset=chardet.detect(data[0][1])['encoding']
msg = email.message_from_string(data[0][1].decode(charset))
问题解决了,顺便查了一下啊message_from_string的官方说明,发现还有email.message_from_bytes。
于是把代码进一步改为改为 :
msg = email.message_from_bytes(data[0][1])
普通邮件正常,当读到刚才报错的那封邮件时居然又报错了,提示:
object of type 'Header' has no len()
报错位置:
email.utils.parseaddr(msg.get('from'))
没有时间折腾,暂时先用message_from_string把
PS:
报错的邮件是腾讯企业邮箱发出的异地登录提醒:
encoding:ISO-8859-1
Subject: 异地登录提醒
From: 10000@exmail.weixin.qq.com
博客讲述了在处理电子邮件时遇到的编码问题,特别是从腾讯企业邮箱收到的一封异地登录提醒邮件。原始代码尝试使用'utf-8'解码邮件内容,但遇到了错误。通过引入`chardet`库检测邮件的编码,然后使用`email.message_from_string`成功解码。然而,当尝试使用`email.message_from_bytes`时,又遇到了`Header`对象没有长度的问题。邮件的编码为ISO-8859-1。最终,作者选择了继续使用`message_from_string`来避免问题。
3691

被折叠的 条评论
为什么被折叠?



