从带有多个附件的电子邮件中下载一个特定的Outlook附件

时间:2019-03-07 19:45:18

标签: python-3.x outlook email-attachments

使用Python 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 :(得分:0)

这个问题是我在文件名搜索中出现的错字。下划线。在每个步骤中添加了额外的打印内容,以确保每个部分均有效。

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