0

因此,我是 Python 和编码的初学者,并试图构建一个代码,该代码将提供有关从联系人收到的最后一封电子邮件的信息。现在,我给出了从联系人收到的所有电子邮件的输出。我只想让它打印最后一封电子邮件。

关于如何去做的任何建议?

import email
from imapclient import IMAPClient

HOST = 'imap.gmail.com'
USERNAME = 'username'
PASSWORD = 'password'
ssl = True

## Connect, login and select the INBOX
server = IMAPClient(HOST, use_uid=True, ssl=ssl)
server.login(USERNAME, PASSWORD)
select_info = server.select_folder('INBOX')

messages = server.search(['FROM', 'email_of_the_contact@gmail.com'])

response = server.fetch(messages, ['RFC822'])

for msgid, data in response.items():
    msg_string = data[b'RFC822']
    msg = email.message_from_string(msg_string.decode())
    print('ID %d: From: %s Date: %s' % (msgid, msg['From'], msg['date']))
4

1 回答 1

0

答案取决于“响应”对象的实际结构,这并不完全清楚,但您可以尝试以下操作,而不是您尝试过的 for 循环:

last_msg_id = list(response.keys())[-1]
data = response[last_msg_id]
msg_string = data[b'RFC822']
msg = email.message_from_string(msg_string.decode())
print('ID %d: From: %s Date: %s' % (last_msg_id , msg['From'], msg['date']))

基本上,我们没有循环遍历所有消息 ID 和所有数据,而是获取了消息 ID 的完整列表('response.keys()'),然后只提取该列表中的最后一个条目,并使用它来提取其余的电子邮件详细信息。

于 2020-03-06T17:50:05.167 回答