Загрузка почтовых вложений с помощью Python - если имеется более одного вложения - PullRequest
0 голосов
/ 22 мая 2019

У меня есть код, который выполняет поиск в папке входящих сообщений группы Outlook на основе определенных критериев и извлекает дату и время сообщений электронной почты, соответствующих указанным критериям.Этот код также загружает первое вложение в электронном письме.

import win32com.client
from datetime import date, timedelta
import os


outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")

inbox = outlook.GetDefaultFolder(18).Folders.Item("xxx")
messages = inbox.Items

path = os.path.expanduser("C:\\Users\\User\\Documents"
                          "\\Projects\\Python Projects\\Email Classification\\Email Attachments")


dateHigh = date.today() - timedelta(days=45)
dateLow = date.today() - timedelta(days=-0)
subject = "xxxxxxxx"

max = 100000
for count, message in enumerate(messages):
    if count > max:
        break
    if subject in message.subject and message.senton.date() > dateHigh and message.senton.date() < dateLow:
       print(message.senton.date())
       print(message.senton.time())
       print(message.subject)
       attachments = message.Attachments
       attachment = attachments.Item(1)
       for attachment in message.Attachments:
           if attachments.Count > 0:
               attachment.SaveASFile(path + '\\' + str(attachment))
           break

Я ожидал, что файлы вложений электронной почты (pdf / csv) будут загружены и сохранены, однако загружаются только изображения из электронных писем.,Как загрузить другие прикрепленные файлы в электронное письмо?

1 Ответ

1 голос
/ 22 мая 2019

Попробуйте следующий код в отладчике Python.Сохраняются ли вложения?

import win32com.client
import os
from os.path import expanduser
home = expanduser("~")

outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")

inbox = outlook.GetDefaultFolder("18")
all_inbox = inbox.Items

save_folder = os.path.join(home, "attach")
if not(os.path.exists(save_folder)):
    os.mkdir(save_folder)

for msg in all_inbox:
    print(msg.Subject)

    for att in msg.Attachments:
        print(att.FileName)
        print(msg.Attachments.Count)
        att.SaveASFile(os.path.join(save_folder, str(att.FileName)))
...