0

所以我的目标是找到联系人的最后一封电子邮件并输入工作表。当前的挑战与 Gmail 部分有关。

所以当前的代码给了我想要的结果。但是,有些联系人有超过 1000 封电子邮件,将它们全部列出,然后打印出最后一封会增加总计算时间。

因此考虑通过将日期范围引入搜索参数来减少计算时间。现在,这正在减少总体计算时间。但是,对于最近收到电子邮件的某些联系人超出了日期范围,它会给我一个索引错误:列表索引超出范围。

我试图找到一种方法来扩大日期范围,直到找到来自该特定联系人的最后一封电子邮件。此外,为了打破循环,将有一个结束日期,因为超过该时间的邮件将无关紧要。找到最后一封电子邮件后,它将返回到其余联系人的默认日期范围。

我有点迷失了如何做到这一点。此外,我是编码/python 的初学者,所以在这一点上很有可能超出我的意识。因此,对此的任何帮助表示赞赏。:)

import email
from imapclient import IMAPClient
from datetime import date
from dateutil.relativedelta import relativedelta

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')

#search INBOX
m = -6
since_date = date.today() + relativedelta(months=m-1)

end_date = date(2016, 1, 1)

messages = server.search(['FROM', 'email_i_want_to_search@gmail.com', 'Since', since_date])

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

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']))
4

0 回答 0