Получение правильной даты последнего письма, отправленного контакту - PullRequest
0 голосов
/ 10 марта 2020

Итак, мне удалось получить дату последнего письма, полученного от контакта, в коде ниже.

Теперь я пытаюсь получить дату последнего письма, отправленного контакту. Как новичок в кодировании / python, я не могу понять это правильно. Я пытался изменить «С» на «К», но это не давало мне правильную дату.

Есть идеи, как мне поступить с этим? Я попытался осмотреться и не нашел решения.

import email
from imapclient import IMAPClient
from datetime import timedelta, date, datetime


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

since_date = date(2016, 1, 1)    

##Search Inbox
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']))

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

Как насчет этого метода? Это не очень просто, но это делает работу.

  • Составьте Список сообщений, отправленных определенному пользователю
  • Получить из него элементы (первое - самое последнее отправленное сообщение)
  • Используйте идентификатор первого сообщения, чтобы сделать Get , используя metadata и date в качестве параметров для format и metadataHeaders

  • Получить значение первого элемента из headers возвращенного

    service = build('gmail', 'v1', credentials=creds)


    messages = service.users().messages().list(userId='me', q='to:user@email.com').execute()

    items = messages.items()[1][1]

    lastmess = service.users().messages().get(userId='me', id=items[0]['id'], format='metadata', metadataHeaders='Date').execute()
    print (lastmess['payload']['headers'][0]['value'])

Результат:

Wed, 11 Mar 2020 16:10:32 +0100

0 голосов
/ 11 марта 2020

Причина, по которой вы не получаете правильную дату, заключается в том, что список не упорядочен. Чтобы гарантировать, что вы получаете правильный, вам нужно сначала отсортировать его.

Попробуйте это быстрое пошаговое решение, написанное в дружественном стиле для новичков:

# Getting your response keys
response_keys='cabd' 

# Your response keys converted into list
msg_ids = list(response_keys) 
print(msg_ids) # result: ['c', 'a', 'b', 'd']

# Here your are sorting the list in place using built-in sort function
# The syntax is: list.sort(reverse=True|False) and the default is True
msg_ids.sort() 
print(msg_ids) # result: ['a', 'b', 'c', 'd']

# Finally, grab the last item in the list
last_msg_id = msg_ids[-1] 
print(last_msg_id ) # result: d
...