Python电子邮件解析问题

blo*_*m17 12 python gmail parsing smtplib python-3.x

所以我正在尝试在python中编写一个脚本,该脚本登录到我的gmail帐户,然后很快在GUI中告诉我该消息是什么.我稍后会对代码做更多的事情,使它有点程序更有用但是现在我只是能够解析我得到的原始信息.这是我的代码:

#Read Email Script
import imaplib
import email

mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login('username@gmail.com', 'passwordgoeshere')
mail.list()
mail.select("INBOX") # connect to inbox.


result, data = mail.search(None, "ALL")

ids = data[0]
id_list = ids.split()
latest_email_id = id_list[-1]

result, data = mail.fetch(latest_email_id, '(RFC822)')

raw_email = data[0][1]

email_message = email.message_from_string(raw_email)

print (email_message['Subject'])
Run Code Online (Sandbox Code Playgroud)

现在基本上应该尝试读出发送到我收件箱的最新电子邮件的主题.但是,我在控制台中收到以下错误消息:

>>> 
Traceback (most recent call last):
  File "C:/Users/Dhruvin Desai/Documents/Python/script.py", line 21, in <module>
    email_message = email.message_from_string(raw_email)
  File "C:\Python33\lib\email\__init__.py", line 40, in message_from_string
    return Parser(*args, **kws).parsestr(s)
  File "C:\Python33\lib\email\parser.py", line 69, in parsestr
    return self.parse(StringIO(text), headersonly=headersonly)
TypeError: initial_value must be str or None, not bytes
>>> 
Run Code Online (Sandbox Code Playgroud)

我不知道为什么会这样,但由于它告诉我email_message需要的字符串格式,我试过这个:

email_message = email.message_from_string(str(raw_email))
Run Code Online (Sandbox Code Playgroud)

但是,无论如何,在运行整个脚本后,结果总是会导致控制台说 None

我不知道该怎么办,请帮忙.

Leo*_*o.Z 31

因为您使用的是Python3,而不是使用:

email.message_from_string(raw_email)
Run Code Online (Sandbox Code Playgroud)

用途:

email.message_from_bytes(raw_email)
Run Code Online (Sandbox Code Playgroud)