【问题标题】:Python can't read latest Outlook attachments, only older onesPython 无法读取最新的 Outlook 附件,只能读取较旧的附件
【发布时间】:2018-07-11 12:22:01
【问题描述】:

情况:

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

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

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

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

问题:

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

问候,

多尤诺

代码:

# -*- 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()

【问题讨论】:

  • 您能否分享更多您的脚本,尤其是“查找最新电子邮件”的部分?
  • 请显示实际上未能按预期执行的代码。
  • @DmitryStreblechenko,以上更新。我没有显示代码的原因是代码在另一台 Windows 机器上运行良好。代码很简单,下载与字符串“附件名称”匹配的最新电子邮件附件。如果我创建一个新的个人资料,它会使用最新的电子邮件进行更新,但它不会保持最新状态。
  • @sgriffin 以上更新

标签: python outlook com win32com


【解决方案1】:

您的脚本将作用于集合 Items 中的第一个项目,而您尚未指定该集合应如何排序。因此,如果集合碰巧首先使用最近的项目进行排序,那么您的代码恰好可以工作。您应该使用Items.Sort 指定排序顺序。

【讨论】:

  • 好主意,但相同的脚本在另一台 Windows 机器上运行良好。问题必须出在 Outlook 配置中。有趣的是:每次我创建一个新的 Outlook 配置文件时,脚本都会设法使用最新的电子邮件进行更新。
  • 嗯,我继续尝试了这个messages.Sort("[ReceivedTime]", True),它成功了!我不明白为什么这没有自动发生或电子邮件尚未订购的原因。很好的收获@sgriffin
  • 当你不指定排序顺序时,你会得到任何已经存在的排序,这可能受到用户选择的视图的影响。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-09
  • 2020-04-09
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多