Как загрузить вложения электронной почты из Outlook, используя Python - PullRequest
0 голосов
/ 07 апреля 2020

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

Это код, который я использовал:

import datetime
import os
import win32com.client


path = os.path.expanduser("//cottonwood//users///MyDocuments//Projects//outlook crawler")

today = datetime.date.today()

outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(6) 
messages = inbox.Items

def saveattachemnts(subject):
    for message in messages:
        if message.Subject == subject and message.Unread or message.Senton.date() == today:
            # body_content = message.body
            attachments = message.Attachments
            attachment = attachments.Item(1)
            for attachment in message.Attachments:
                attachment.SaveAsFile(os.path.join(path, str(attachment)))
                if message.Subject == subject and message.Unread:
                    message.Unread = False
                break

saveattachemnts("Snarf")

Я получаю эту ошибку:

  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 является рабочей электронной почтой и представляет собой Microsoft Outlook 2010.

У меня вопрос, как загрузить и сохранить вложения из Microsoft Outlook.

1 Ответ

1 голос
/ 08 апреля 2020

Работа с Items.Restrict Method (Outlook) для фильтрации по теме и вложению. см. Фильтрующие элементы

import win32com.client

Outlook = win32com.client.Dispatch("Outlook.Application")
olNs = Outlook.GetNamespace("MAPI")
Inbox = olNs.GetDefaultFolder(6)

Filter = ("@SQL=" + chr(34) + "urn:schemas:httpmail:subject" +
          chr(34) + " Like 'Snarf' AND " +
          chr(34) + "urn:schemas:httpmail:hasattachment" +
          chr(34) + "=1")

Items = Inbox.Items.Restrict(Filter)
for Item in Items:
    for attachment in Item.Attachments:
        print(attachment.FileName)
        attachment.SaveAsFile(r"C:\subfolder\filename.pdf")

Фильтрация элементов с использованием сравнения строк , что DASL Поддержка фильтров включает в себя эквивалентность, префикс, фразу и соответствие подстроки. Обратите внимание, что при фильтрации по свойству Subject префиксы, такие как «RE:» и «FW:», игнорируются.

...