Загрузите одно конкретное вложение Outlook из электронного письма с несколькими вложениями - PullRequest
1 голос
/ 07 марта 2019

Работа над скриптом Py32 3 win32com.client, который ищет письма только от определенного отправителя и загружает 1 из нескольких вложений.

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

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

Пока у меня есть:

import win32com.client
import os

mydesktop = os.path.expanduser('~') + '/Desktop/'
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")

# Select main Inbox
inbox = outlook.GetDefaultFolder(6)
messages = inbox.Items

sender = 'mysender@domain'
MyDailyfolder = mydesktop + 'My Daily Data/'

try:
    for message in messages:
        msg_date = message.SentOn.strftime('%Y-%m-%d')
        try:
            s = message.sender
            s = str(s)
            if s == sender:
                for att in message.Attachments:
                    if "Dashboard2_dashboard2" in att.FileName:  #<---This doesn't work.
                        outfile_name2 = 'MycustomName' + msg_date + '.csv'

                    outfile_path2 = MyDailyfolder + outfile_name2
                    if not os.path.exists(MyDailyfolder): os.makedirs(MyDailyfolder)
                    # save file 
                    att.SaveASFile(outfile_path2)
                    print('Saved file:', outfile_name2)
        except:
            x=1
except:
    x=1

Результат загружает все вложенные файлы в электронное письмо в новую папку на моем рабочем столе, но перезаписывает каждую копию.Я пытаюсь выбрать только вложение, которое содержит "Dashboard2dashboard2" на нем.Я думаю, что я должен использовать «для части в msg.walk ():», но никогда раньше не использовал эту команду.Есть идеи?

1 Ответ

0 голосов
/ 08 марта 2019

Ах, проблема в опечатке в моем имени файла.Дополнительное подчеркивание.Добавлена ​​дополнительная печать на каждом шаге, чтобы убедиться, что каждая часть действительна.

sender = 'mysender@domain'
MyDailyfolder = mydesktop + 'My Daily Data/'

try:
    for message in messages:
        msg_date = message.SentOn.strftime('%Y-%m-%d')
        try:
            s = message.sender
            s = str(s)
            if s == sender:
                print('Sender:' , message.sender)
                for att in message.Attachments:
                    if "dashboard_2.csv" in att.FileName:
                        outfile_name = msg_date + att.FileName
                        print ('Match search confirmed')

                    # Backup test, print filename and watch spelling
                    print (att.FileName)

                    # Create a folder and copy/paste attachment there
                    outfile_path = MyDailyfolder + outfile_name
                    if not os.path.exists(MyDailyfolder): os.makedirs(MyDailyfolder)

                    # save file 
                    att.SaveASFile(outfile_path)
        except:
            pass
except:
    pass
...