python exchangelib, как получить электронную почту в пределах определенного диапазона дат?

Я пытался использовать exchangelib для извлечения группового почтового ящика для анализа, и я хочу извлечь в пределах диапазона дат.
пытался использовать функцию фильтра, но, кажется, работает только для каландра, могу ли я посоветовать, есть ли образец для электронной почты? Спасибо всем.

1 ответ

Решение

Вам необходимо отфильтровать поле даты и времени, которое доступно в элементах сообщения. Message.FIELDS содержит все доступные поля на Message учебный класс. Вы можете перечислить все поля даты и времени с чем-то вроде:

>>> [f.name for f in Message.FIELDS if f.value_cls == EWSDateTime]
['datetime_received', 'datetime_sent', 'datetime_created', 'reminder_due_by', 'last_modified_time']

README показывает примеры использования .filter(start__range(x, y)), но start поле доступно только на CalendarItem объекты. Вместо этого используйте, например, datetime_received фильтровать Message объекты:

tz = EWSTimeZone.localzone()
emails_from_2017 = account.inbox.filter(datetime_received__range=(
    tz.localize(EWSDateTime(2017, 1, 1)),
    tz.localize(EWSDateTime(2018, 1, 1))
))
pytz_tz = pytz.timezone('Europe/Copenhagen')
py_dt = pytz_tz.localize(datetime(year,month,day))
ews_bfr = EWSDateTime.from_datetime(py_dt)

for item in account.inbox.all().order_by('-datetime_received')[:10000]:
    if item.datetime_received < ews_bfr:
        item.delete() #delete all filtered emails
        print("Mail deleted Successfully")
Другие вопросы по тегам