Расширить диапазон дат для поиска Gmail с помощью Imapclient - PullRequest
0 голосов
/ 08 марта 2020

Итак, моя цель - найти последнее электронное письмо от контакта и ввести лист. Текущая проблема связана с частью Gmail.

Таким образом, текущий код дает мне желаемый результат. Тем не менее, некоторые контакты имеют более 1000 сообщений электронной почты и перечисляют их все, а затем распечатка последнего увеличивает общее время вычислений.

Поэтому задумывался об уменьшении времени вычислений путем введения диапазона дат в параметры поиска. Теперь это сокращает общее время вычислений. Однако для некоторых контактов, которые получили последнее электронное письмо и выходят за пределы диапазона дат, появляется сообщение об ошибке индекса: индекс индекса выходит за пределы диапазона.

Я пытался найти способ расширить диапазон дат, пока не будет найдено последнее письмо от этого конкретного контакта. Кроме того, чтобы сломать l oop, будет дата окончания, потому что письма после этого времени не будут иметь значения. После того, как последнее письмо найдено, оно возвращается к диапазону дат по умолчанию для остальных контактов.

Я немного растерялся, узнав, как это сделать. Кроме того, я новичок в кодировании / 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']))
...