【问题标题】:Download one specific Outlook attachment from an email with multiple attachments从包含多个附件的电子邮件中下载一个特定的 Outlook 附件
【发布时间】:2019-03-07 19:45:18
【问题描述】:

使用 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”的附件。我想我必须使用“for part in msg.walk():”,但以前从未使用过该命令。有什么想法吗?

【问题讨论】:

  • 可以使用pass关键字,而不是写x=1
  • “pass”听起来更直观,谢谢

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


【解决方案1】:

啊,问题是我的文件名搜索中的拼写错误。一个额外的下划线。在每个步骤中添加了一个额外的打印,以确保每个部分都是有效的。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 2022-11-24
    • 2022-01-19
    • 2014-05-25
    • 2017-08-09
    相关资源
    最近更新 更多