Как при парсинге почтового ящика получить список писем за определённые даты?

Рейтинг: -1Ответов: 1Опубликовано: 23.03.2023

Пишу на питоне. Использую imaplib, email. Хочу написать код который сможет получать список писем, за определённый промежуток времени. К примеру за даты с 20.03.2023 по 23.03.2023. Основная проблема, это прописать условия поиска писем по дате. Я нашёл код который выдаёт список писем по папкам, может его можно переделать под фильтрацию по датам, если нет, пожалуйста, предложите иное решение.

import imaplib
import email
from email.header import decode_header
import webbrowser
import os

# account credentials
username = "@outlook.com"
password = "password"

imap_server = "outlook.office365.com"

imap = imaplib.IMAP4_SSL(imap_server)
# 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])

# close the connection and logout
imap.close()
imap.logout()

Ответы

▲ 1

Вариант решения это использовать конструкцию mail.uid('search', None, '(SINCE {date_start} BEFORE {date_end}') Вот общий кусок где это используется.

def outlook_mail_list(emails, password, date_start, date_end):
        mail = imaplib.IMAP4_SSL('outlook.office365.com')
        mail.login(emails, password)
        mail.select('inbox')
        result, data = mail.uid('search', None, '(SINCE {date_start} BEFORE {date_end})'.format(date_start=date_start, date_end=date_end))