簡體   English   中英

Python imaplib 搜索帶有日期和時間的電子郵件

[英]Python imaplib search email with date and time

我正在嘗試閱讀特定日期和時間的所有電子郵件。

mail = imaplib.IMAP4_SSL(self.url, self.port)
mail.login(user, password)
mail.select(self.folder)
since = datetime.strftime(since, '%d-%b-%Y %H:%M:%S')

result, data = mail.uid('search', '(SINCE "'+since+'")', 'UNSEEN')

它沒有時間工作正常。 是否也可以隨時間搜索?

您無法按日期或時間搜索,但您可以檢索指定數量的電子郵件並按日期/時間過濾它們。

import imaplib
import email
from email.header import decode_header

# account credentials
username = "youremailaddress@provider.com"
password = "yourpassword"

# create an IMAP4 class with SSL 
imap = imaplib.IMAP4_SSL("imap.gmail.com")
# authenticate
imap.login(username, password)

status, messages = imap.select("INBOX")
# number of top emails to fetch
N = 3
# total number of emails
messages = int(messages[0])

for i in range(messages, messages-N, -1):
    # fetch the email message by ID
    res, msg = imap.fetch(str(i), "(RFC822)")
    for response in msg:
        if isinstance(response, tuple):
            # parse a bytes email into a message object
            msg = email.message_from_bytes(response[1])
            date = decode_header(msg["Date"])[0][0]
            print(date)

此示例將為您提供收件箱中最后 3 封電子郵件的日期和時間。 如果您在指定的提取時間內收到超過 3 封電子郵件,您可以調整提取的電子郵件數量N

此代碼片段最初由 Abdou Rockikz 在thepythoncode上編寫,后來由我自己修改以滿足您的要求。

對不起,我遲到了 2 年,但我有同樣的問題。

不幸的是沒有。 RFC 3501 §6.4.4中定義的通用 IMAP 搜索語言不包括任何按時間搜索的規定。

SINCE被定義為采用<date>項目,該項目又被定義為date-day "-" date-month "-" date-year ,帶或不帶引號。

IMAP 甚至不知道時區,因此您必須根據INTERNALDATE項目在本地過濾掉不適合您范圍的前幾條消息。 您甚至可能需要額外獲取多天的消息。

如果您使用的是 Gmail,則可以使用作為擴展程序提供的 Gmail 搜索語言。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM