Я пытаюсь вернуть имя файла в любом вложении, которое я встречаю как строку при повторении любой конкретной папки в 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
Но я не могу пройти достаточно далеко, чтобы даже напечатать нулевое значение, и вложения, которые я пытаюсь прочитать, имеют имена файлов в любом случае.
Спасибо.
Ошибка 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")