我有一个程序,可以从我的电子邮件中检索消息(通过POP),我想检索电子邮件的主题,我使用的是:
import poplib
from email import parser
pop_srvr = poplib.POP3_SSL('pop.gmail.com')
pop_srvr.user('username')
pop_srvr.pass_('password')
messages = [pop_srvr.retr(i) for i in range(1, len(pop_srvr.list()[1]) + 1)]
messages = [b"\n".join(mssg[1]) for mssg in messages]
messages = [parser.Parser().parsestr(mssg) for mssg in messages]
for message in messages:
print (message['subject'])
print (message['body'])
pop_srvr.quit()
但是当我运行它的时候,我得到了这个
Traceback (most recent call last):
File "C:/Users/Yousef/Desktop/parser proto.py", line 11, in <module>
messages = [parser.Parser().parsestr(mssg) for mssg in messages]
File "C:/Users/Yousef/Desktop/parser proto.py", line 11, in <listcomp>
messages = [parser.Parser().parsestr(mssg) for mssg in messages]
File "C:\Users\Yousef\AppData\Local\Programs\Python\Python36-
32\lib\email\parser.py", line 68, in parsestr
return self.parse(StringIO(text), headersonly=headersonly)
TypeError: initial_value must be str or None, not bytes
谁能告诉我我哪里做错了..。
发布于 2017-05-26 12:03:40
It seems linke poplib.POP3_SSL module returns bytes object.
You probably need to change following :
["\n".join(mssg[1]) for mssg in messages]
to
[b"\n".join(mssg[1]) for mssg in messages]
我发现email
模块有message_from_bytes
功能。你试过用它吗?在下面的代码中,我可能会被误解。请在您的身边核实:
import email
messages = [pop_srvr.retr(i) for i in range(1, len(pop_srvr.list()[1]) + 1)]
messages = [b"\n".join(mssg[1]) for mssg in messages]
messages = [email.message_from_bytes(mssg) for mssg in messages]
for message in messages:
print (message['subject'])
print (message['body'])
pop_srvr.quit()
更多信息:parsing email contents from poplib with email module (PYTHON)
发布于 2017-05-26 12:26:56
你有没有试过把它转换成字符串?
messages = [parser.Parser().parsestr(str(mssg)) for mssg in messages]
它可能会导致不正确的字符串,但通过这种方式,您可以检查mssg
是否确实是一个类似字节的字符串。如果错误消失,您可以将其转换为适合您的程序的方式。
https://stackoverflow.com/questions/44200975
复制相似问题