用 Python 读取 Gmail 电子邮件

Pyt*_*ect 6 python email gmail imap python-3.x

我正在尝试创建一个简单的脚本来检查我的 Gmail 是否有具有特定标题的电子邮件。当我在 Python 3.7.3 上运行这个程序时,我收到以下数据:('OK', [b'17']).

我需要在 python 中访问电子邮件的正文。我只是不确定如何处理我拥有的数据。

这是我当前的代码:

import imaplib
import credentials

imap_ssl_host = 'imap.gmail.com'
imap_ssl_port = 993
username = credentials.email
password = credentials.passwd
server = imaplib.IMAP4_SSL(imap_ssl_host, imap_ssl_port)

server.login(username, password)
server.select('INBOX')

data = server.uid('search',None, '(SUBJECT "MY QUERY HERE!")')
print(data)
Run Code Online (Sandbox Code Playgroud)

运行代码的结果:

import imaplib
import credentials

imap_ssl_host = 'imap.gmail.com'
imap_ssl_port = 993
username = credentials.email
password = credentials.passwd
server = imaplib.IMAP4_SSL(imap_ssl_host, imap_ssl_port)

server.login(username, password)
server.select('INBOX')

data = server.uid('search',None, '(SUBJECT "MY QUERY HERE!")')
print(data)
Run Code Online (Sandbox Code Playgroud)

我知道这有点粗糙,但我仍在学习,因此,您对帮助我改进的任何建议将不胜感激!

Jos*_*lls 4

您需要首先列出所选邮箱的内容并获取其中一项。你可以做这样的事情(另请检查@asynts建议的链接)

    imap.select('Inbox')
    status, data = imap.search(None, 'ALL')
    for num in data[0].split():
      status, data = imap.fetch(num, '(RFC822)')
      email_msg = data[0][1]
Run Code Online (Sandbox Code Playgroud)

如果您只需要正文中的特定字段,则可以过滤如下字段,而不是解析 RFC:

    status, data = imap.fetch(num, '(BODY[HEADER.FIELDS (SUBJECT DATE FROM TO)])')
Run Code Online (Sandbox Code Playgroud)