Python无法读取最新的Outlook附件,只能读取较旧的Outlook附件

时间:2018-07-10 16:21:35

标签: python outlook com win32com

情况:

我每天都会收到一封带有附件的电子邮件,但是我不想一直都需要手动保存它,所以我制作了一个脚本来为我下载。

我正在使用Python库 win32com 在后台运行Outlook:

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

该脚本找到带有附件的最新电子邮件并保存。

问题:

它不会保存最新的附件。它始终停留在同一封电子邮件中,就像Outlook根本没有更新一样。它唯一有效的时间是删除我的Outlook配置文件并创建一个新的配置文件。关于这种行为的原因是什么?

此致

Doyuno

代码:

# -*- coding: utf-8 -*-
import datetime

import pandas as pd
import win32com.client

path = "C:\some\path"
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")

def getfoldernum():
    i = 1
    for x in outlook.Folders:
        if ('bob@example.com' == str(x)):
           print 'Found the Folder'
           return i
        else:
           i += 1

def main():
    foldernum = getfoldernum()

    inbox = outlook.Folders.Item(foldernum).Folders('Inbox')

    d = 0
    w = 0
    messages = inbox.Items
    for msg in messages:
        print msg.SentOn

        if msg.Attachments:
            attachments = msg.Attachments
            for attachment in attachments:
                if 'Attachment name' in str(attachment.FileName):
                    location = path + 'Archive\\Daily\\'+str(attachment.FileName)
                    attachment.SaveAsFile(location)
                    df = pd.read_excel(location)

                    if d == 0:
                        attachment.SaveAsFile(path+'filename.xlsx')
                        d = 1

                else:
                    print 'Attachment not found or wrong name'


if __name__ == '__main__':
    main()

1 个答案:

答案 0 :(得分:0)

您的脚本将对集合Items中最先出现的任何项目起作用,并且您没有执行任何操作来指定该集合的排序方式。因此,如果该集合碰巧排在最前,那么您的代码就可以正常工作。您应该使用Items.Sort来指定排序顺序。