0

所以我成功地从下面的代码中的联系人那里收到了最后一封电子邮件的日期。

现在我正在尝试获取发送给联系人的最后一封电子邮件的日期。作为编码/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']))
4

2 回答 2

0

这个方法怎么样?不是很简单,但它可以完成工作。

  • 制作发送给特定用户的消息列表
  • 从中获取项目(第一个是最近发送的消息)
  • 使用第一条消息的 id 执行Get,使用metadataanddate作为参数formatmetadataHeaders

  • 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

于 2020-03-11T15:54:16.157 回答
0

您没有得到正确日期的原因是该列表是无序的。为了保证你得到正确的,你需要先对它进行排序。

试试这个以友好风格为新手编码的快速分步解决方案:

# 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
于 2020-03-10T21:20:43.953 回答