Невозможно прочитать объект «Outlook» как вложение с win32com - PullRequest
0 голосов
/ 01 декабря 2018

Я пытаюсь вернуть имя файла любого вложения, с которым я сталкиваюсь, в виде строки при итерации по определенной папке в Outlook с использованием win32com.У меня нет проблем при возврате имени файла в виде строки, когда вложение является чем-то иным, чем «элемент Outlook» (https://i.imgur.com/UauktNV.png) - К сожалению, это единственный тип вложения, который мне действительно нужно обработать.Ошибка, с которой я сталкиваюсь, ниже ...

  File "C:/Users/bob/PycharmProjects/program/program.py", line 76, in handle_email
    attachment = attachments.Item(1)
  File "<COMObject <unknown>>", line 2, in Item
pywintypes.com_error: (-2147352567, 'Exception occurred.', (4096, 'Microsoft Outlook', 'Array index out of bounds.', None, 0, -2147352567), None)

Мой код выглядит следующим образом

outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
root_folder = outlook.Folders.Item(1)
test = root_folder.Folders['test']
messages = test.items

attachments = message.Attachments
attachment = attachments.Item(1)
name = attachment.FileName

Если я печатаю «вложения», я получаю также <COMObject <unknown>>.Это заставило меня поверить, что я, возможно, не подхожу к объекту из иерархии объектов свойств, как указано здесь https://docs.microsoft.com/en-us/office/vba/api/outlook.attachment, хотя AFAIK кажется правильным, но, вероятно, поэтому, когда я пытаюсь закомментировать attachment и then print name Я получаю сообщение об ошибке AttributeError: <unknown>.FileName.

Примечание: мой вопрос похож на этот -> Имя файла возвращается как ноль, когда элемент внешнего вида (.msgфайл) добавляется в качестве вложения в отправленное электронное письмо Outlook

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

Спасибо.

1 Ответ

0 голосов
/ 01 декабря 2018

Ошибка COM при загрузке вложения из outlook через win32com

^ Это было решением.Я пытался вернуть вложения, которые не всегда существовали.

Новый код ниже

attachment = message.Attachments
count = message.Attachments.Count
if count > 0:
    attachment = attachment.Item(1)
    print("[+] Begin attachment")
    print(attachment)
    print("[-] End attachment")
...