[英]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.