微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何通过imap从电子邮件中的原始文本将标头解析为字符串? 答案:更多信息:参考文献:

如何解决如何通过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()返回一个tupleemail.message_from_bytes()期望一个bytes-like object

您的数据类型不匹配。元组不是类似字节的对象,具有可对其进行解码的方法。您需要在调用email.message_from_bytes()或使用诸如message_from_string()之类的其他方法之前进行相应的处理。

请记住,如果执行此操作,tuple != string仍然需要进行数据类型转换。

我希望这对您有帮助!

参考文献:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。