Невозможно прочитать объект «Outlook» как вложение с win32com

1

Я пытаюсь вернуть имя файла в любом вложении, которое я встречаю как строку при повторении любой конкретной папки в 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 и затем напечатать name я получаю сообщение об ошибке AttributeError: <unknown>.FileName.

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

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

Спасибо.

Теги:
outlook
win32com

1 ответ

0

Ошибка 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")

Ещё вопросы

Сообщество Overcoder
Наверх
Меню