如何阅读Python 3中的电子邮件内容

时间:2017-08-01 09:27:34

标签: python python-3.x email base64 imaplib

我已经尝试了很多代码来访问和阅读电子邮件内容,例如,关于Gmail我只能进行身份验证,而使用Outlook我有代码可以读取电子邮件但是它已加密...但现在它只能访问电子邮件而且没有输出加密信息。所以我需要帮助来解决这个问题。感谢

以下是代码:

import imaplib
import base64 

email_user = input('Email: ')
email_pass = input('Password: ')

M = imaplib.IMAP4_SSL('imap-mail.outlook.com', 993)
M.login(email_user, email_pass)
M.select()
typ, data = M.search(None, 'ALL')
for num in data[0].split():
    typ, data = M.fetch(num, '(RFC822)')
    num1 = base64.b64decode(num1)
    data1 = base64.b64decode(data)
    print('Message %s\n%s\n' % (num, data[0][1]))
M.close()
M.logout()

3 个答案:

答案 0 :(得分:1)

我已经检查了你的代码,并且有几条评论。第一个是当你在这里粘贴代码时,似乎已经删除了逗号。我试图把它们放回去,所以检查我的代码是否与你的代码匹配。请记住,如果无法访问Outlook,我无法测试我的建议。

<p>
<h2 >Patient</h2>
</p>
<p>
<h2 >Chart</h2>
</p>
<p>
<h2 >Calendar</h2>
</p>

假设正确重构,您可以在第10行调用消息列表数据,但随后将调用fetch()的结果重新分配给第13行的数据。

在第14行,您解码num1,尚未定义。我不确定数字是否需要解码,这看起来有点奇怪。

在第16行,您打印的是编码值,而不是您已解码的值。我想你可能想要像

这样的东西
import imaplib
import base64
email_user = input('Email: ')
email_pass = input('Password: ')

M = imaplib.IMAP4_SSL('imap-mail.outlook.com', 993)
M.login(email_user, email_pass)
M.select()

typ, data = M.search(None, 'ALL')

for num in data[0].split():
    typ, data = M.fetch(num, '(RFC822)')   # data is being redefined here, that's probably not right
    num1 = base64.b64decode(num1)          # should this be (num) rather than (num1) ?
    data1 = base64.b64decode(data)
    print('Message %s\n%s\n' % (num, data[0][1]))  # don't you want to print num1 and data1 here?

M.close()
M.logout()

希望有所帮助。

答案 1 :(得分:0)

使用数据[0] [1] .decode('utf-8')

它将起作用。我也面临着同样的问题。它对我有用。

答案 2 :(得分:0)

您只需要在您的 Gmail 帐户中启用安全性较低的应用程序,如果未启用,即使您的代码没有问题,您也会收到身份验证错误。我也得到了所以我研究并得到了这个错误