email.message_from_string 和 email.message_from_bytes

博客讲述了在处理电子邮件时遇到的编码问题,特别是从腾讯企业邮箱收到的一封异地登录提醒邮件。原始代码尝试使用'utf-8'解码邮件内容,但遇到了错误。通过引入`chardet`库检测邮件的编码,然后使用`email.message_from_string`成功解码。然而,当尝试使用`email.message_from_bytes`时,又遇到了`Header`对象没有长度的问题。邮件的编码为ISO-8859-1。最终,作者选择了继续使用`message_from_string`来避免问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在网上找到的案例代码都是使用

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值