如何解决如何通过imap从电子邮件中的原始文本将标头解析为字符串? 答案:更多信息:参考文献:
我正在尝试通过imaplib和email模块将主题行,收件人,发件人和正文文本解析为字符串。尝试解析原始消息时,我收到一条错误消息,提示 AttributeError:'tuple'对象没有属性'decode' 。请协助。
import imaplib
import email
Mymail = imaplib.IMAP4_SSL('imap.gmail.com')
password = input()
abcxyz123
Mymail.login('xxx@gmail.com',password)
('OK',[b'xxx@gmail.com authenticated (Success)'])
Mymail.select('INBox',readonly = True)
('OK',[b'1'])
UIDs = Mymail.search(None,'(SINCE "20-Aug-2019")')
UIDs
('OK',[b'1'])
rawMessage = Mymail.fetch('1','(BODY[] FLAGS)')
rawHeader = Mymail.fetch('1',"(BODY[HEADER.FIELDS (FROM)])")
rawHeader2 = Mymail.fetch('1',"(BODY[HEADER.FIELDS (TO)])")
rawHeader3 = Mymail.fetch('1',"(BODY[HEADER.FIELDS (SUBJECT)])")
rawHeader4 = Mymail.fetch('1',"(BODY[TEXT])")
**msg = email.message_from_bytes(rawMessage)**
当我尝试解析原始消息时,收到以下错误消息:
*Traceback (most recent call last):
File "<pyshell#17>",line 1,in <module>
msg = email.message_from_bytes(rawMessage)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/email/__init__.py",line 46,in message_from_bytes
return BytesParser(*args,**kws).parsebytes(s)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/email/parser.py",line 122,in parsebytes
text = text.decode('ASCII',errors='surrogateescape')
AttributeError: 'tuple' object has no attribute 'decode'*
解决方法
答案:
您正在尝试将元组对象解析为尝试解码字节的方法。
更多信息:
imaplib.IMAP4_SSL().fetch()
返回一个tuple,email.message_from_bytes()
期望一个bytes-like object。
您的数据类型不匹配。元组不是类似字节的对象,具有可对其进行解码的方法。您需要在调用email.message_from_bytes()
或使用诸如message_from_string()
之类的其他方法之前进行相应的处理。
请记住,如果执行此操作,tuple != string
仍然需要进行数据类型转换。
我希望这对您有帮助!
参考文献:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。