Перестала работать функция ограничения в Pywin32 Outlook - PullRequest
0 голосов
/ 01 мая

Я использовал приведенный ниже фрагмент кода, чтобы захватить каждое письмо в определенной подпапке, полученное в течение последних 3 часов, и извлечь некоторую деловую информацию из них перед обработкой, и оно работало отлично в течение недели или около того. Однако вчера по какой-то причине я заметил, что он не работает должным образом, и когда я добавил оператор печати, чтобы увидеть, какие электронные письма отправляются в функцию процесса, я заметил, что она отправляет все с марта по текущую дату (более 1000 электронных писем) .

        outlook = Dispatch("Outlook.Application").GetNamespace("MAPI")
        api_folder = outlook.Folders.Item(1).Folders['Some Folder']

        start = datetime.datetime.now() - datetime.timedelta(hours=3)

        # 05/01/2020 05:23 AM is this the right format?

        start = start.strftime('%m/%d/%Y %H:%M %p')

        messages = api_folder.Items.Restrict("[ReceivedTime] >= '" + start + "'")

        # This prints emails that shouldnt be here after Restrict()
        for msg in messages:
            print(f"{msg.Subject} - {msg.ReceivedTime}")

Я почти уверен, что это, вероятно, очень глупая ошибка в способе вызова Restrict или, возможно, в форматировании времени, но, поскольку я новичок в программировании, я не смог найти root причина того, что делает функцию неправильно себя ведет.

Любая помощь очень ценится.

Спасибо

1 Ответ

0 голосов
/ 01 мая

Хотя даты и время обычно хранятся в формате Date, методы Find и Restrict требуют преобразования даты и времени в строковое представление. Чтобы убедиться, что дата отформатирована так, как ожидает Microsoft Outlook, используйте функцию strftime (или Format в VBA). И убедитесь, что Outlook это понимает:

api_folder.Items.Restrict("urn:schemas:httpmail:datereceived" >= '9/15/2019 12:00 AM')

Обратите внимание, что вы можете настроить требуемый фильтр в Outlook вручную, чтобы получить строковое представление и использовать его в коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...