【问题标题】:save outlook attachments with python使用 python 保存 Outlook 附件
【发布时间】:2022-01-17 07:29:44
【问题描述】:

每个星期一我都会收到主题标题稍有改变的附件。主题标题的固定部分是PB Report,日期为星期一。例如,我在这个星期一收到了主题为 PB Report - 13.12.2021、上周 PB Report - 06.12.2021 等的电子邮件。我想在此代码中实现GetLast,以便仅获取最新发送的报告。另外,我如何告诉 python 搜索以 PB Report 开头的主题,不要看标题的其余部分。我尝试将通配符(*)设为save_attachments('PB Report*'),但没有成功。

import datetime
import os
import win32com.client

path = r"C:/Users/greencolor/Desktop/Autoreport/"
today = datetime.date.today()

outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(6)
messages = inbox.Items


def save_attachments(subject):
    for message in messages:
        if message.Subject == subject:
            for attachment in message.Attachments:
                print(attachment.FileName)
                attachment.SaveAsFile(os.path.join(path, str(attachment)))


if __name__ == "__main__":
    save_attachments('PB Report - 13.12.2021')

我也有替代代码,但是当我运行此代码时,我从未得到结果或错误。需要。

import os
import win32com.client
    
path = r"C:/Users/greencolor/Desktop/Autoreport/"
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(6)
messages = inbox.Items
message = messages.GetLast()


while message:
    if 'PB' in message.subject and 'Report' in message.subject:
        for attachment in message.Attachments:
            print(attachment.FileName)
            attachment.SaveAsFile(os.path.join(path, str(attachment)))

【问题讨论】:

  • 您能否更详细地解释一下:您的主要问题是什么(在 3 个问题中)?您的代码当前存在什么问题?请描述什么不起作用、预期什么以及实际输出/行为是什么。
  • 主要问题是如何通过主题名称搜索从 Outlook 下载多个附件(附加在最新电子邮件中)(但 50% 的主题总是在变化)。

标签: python outlook


【解决方案1】:

参数subject 的通配符不起作用,因为在比较message.Subject == subject 中的相等性时,参数subject 被用作字符串。

您可以在邮件主题上使用字符串方法startswith,例如message.Subject.startswith(subject_prefix) 并使用 save_attachments('PB Report - ') 之类的公共前缀调用您的方法。

进一步使用attachment.FileName 构造输出文件路径。

您可以使用带有适当消息属性的GetLast()Sort() 来过滤最新发送的报告。或者您可以解析消息主题中的日期并相应地对它们进行排序。然而,这值得另一个问题、自己的研究和进一步的规范和关注。

解决方案

示例解决方案如下(请参阅 cmets 进行调整):

def save_attachments(subject_prefix): # changed parameter name
    messages.Sort("[ReceivedTime]", True)  # sort by received date: newest to oldest 
    for message in messages:
        if message.Subject.startswith(subject_prefix): # changed test
            print("saving attachments for:", message.Subject)
            for attachment in message.Attachments:
                print(attachment.FileName)
                attachment.SaveAsFile(os.path.join(path, str(attachment.FileName)))  # changed to file-name
            return  # exit after first matched message

如果您知道消息仅包含所需的消息并按日期排序,也可以使用 GetLast()

message = messages.GetLast()
while message:  # to test if there is a (last) message at all
    # save attachment

相关问题

【讨论】:

  • 非常感谢,它运行得非常好,而且速度比我上面的要快(如果我有完整的标题,上面的只是保存)。我只是有一点小问题。它也下载电子邮件签名中附加的图像。我只需要下载excel文件
猜你喜欢
  • 2016-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-14
  • 2021-09-22
  • 2023-02-02
  • 1970-01-01
  • 2014-04-19
相关资源
最近更新 更多