Внезапная ошибка при получении писем из Outlook с использованием Python и win32com - PullRequest
1 голос
/ 30 мая 2019

РЕДАКТИРОВАТЬ: РЕШЕНО!

Я добавил этот фрагмент кода ниже, чтобы отследить положение основной папки входящих сообщений

для папки в outlook.Folders: печать (папка)

Это подчеркнуло, что что-то изменилось в базовой структуре Outlook, и папка [0] больше не действительна. Теперь я настрою код, чтобы сделать его более надежным и динамически выбирая папку

КОНЕЦ РЕДАКТИРОВАНИЯ

Я написал код для извлечения писем из Outlook и сохранения вложений. Это работало отлично до нескольких дней назад.

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

Кто-нибудь знает, что означает эта ошибка и почему она неожиданно возникла? Я очень унылый, так как код работал так хорошо до этого сбоя. В качестве альтернативы, есть ли лучший способ извлечь электронную почту и вложения из Outlook, используя Python?

import win32com.client


def main():
    pass


def saveAttachments():
    outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")  # Opens Microsoft Outlook
    mailbox = outlook.Folders[0]  # Based off email address
    inbox = mailbox.Folders["Inbox"]
    emails = inbox.Items
    emails.Sort("[ReceivedTime]", True)

    destPath = "\\\\servername\\path\\"

    try:
        for mail in emails:
            if ("Detailed MTM," in mail.subject) and (mail.Attachments.Count > 0):
                print(mail.Sender)
                print(mail.Subject)
                print(mail.Receivedtime)
                attachments = mail.Attachments
                for file in attachments:
                    if "MTMDetailed" in str(file):
                        file.SaveAsFile(destPath + str("MTMDetailed.xls"))
                break
    except:
        file = open(destPath + "error.log", "w")
        file.write("Problem")
        file.close()

if __name__ == '__main__':
    main()
    saveAttachments()

  File "C:\Tools\Python\lib\site-packages\win32com\client\dynamic.py", line 256, in __getitem__
    return self._get_good_object_(self._oleobj_.Invoke(dispid, LCID, invkind, 1, index))
pywintypes.com_error: (-2147352567, 'Exception occurred.', (4096, 'Microsoft Outlook', 'The attempted operation failed.  An object could not be found.', None, 0, -2147221233), None)

1 Ответ

0 голосов
/ 01 июня 2019

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

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