【问题标题】:Viewing content of outlook attachment in pythonpython查看outlook附件内容
【发布时间】:2022-12-12 01:54:56
【问题描述】:

我正在尝试使用 python 获取 outlook 电子邮件附件中的一些数据,然后在 python 中使用该数据。我已经设法编写了代码,该代码将进入我想要的 outlook 收件箱和文件夹,然后获取特定邮件的附件,但是我不确定如何查看该附件的内容。我发现的许多其他问题和教程似乎与将附件保存在文件夹位置更相关,而不是在 python 本身中查看附件。

对于上下文,我试图获取的数据是来自 adobe analytics 的导出报告,该报告是一个 csv 文件,作为 zip 文件附加到电子邮件。 CSV 文件显示了特定时间段的一些数据,我计划安排此报告每周运行一次,所以我想做的是让 python 浏览包含此报告的所有电子邮件,然后将所有这些数据堆叠到一个数据框中这样我就可以将所有历史记录加上最近一周的数据放在一个地方,然后导出这个文件。

请在下面找到我到目前为止编写的代码。如果您需要更多详细信息,或者我没有很好地解释任何内容,请告诉我。我是 python 的新手,尤其是 win32com 库,所以我可能遗漏了一些明显的东西。

#STEP 1---------------------------------------------
#import all methods needed
from pathlib import Path
import win32com.client
import requests
import time
import datetime
import os
import zipfile
from zipfile import ZipFile
import pandas as pd


#STEP 2 --------------------------------------------
#connect to outlook
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")



#STEP 3 --------------------------------------------
#connect to inbox
inbox = outlook.GetDefaultFolder(6)


#STEP 4 --------------------------------------------
#connect to adobe data reports folder within inbox
adobe_data_reports_folder = inbox.Folders['Cust Insights'].Folders['Adobe data reports']



#STEP 5 --------------------------------------------
#get all messages from adobe reports folder
messages_from_adr_folder = adobe_data_reports_folder.Items



#STEP 6 ---------------------------------------------
#get attachement for a specific message (this is just for testing in real world I'll do this for all messages)
for message in messages_from_adr_folder:
    if message.SentOn.strftime("%d-%m-%y") == '07-12-22':
        attachment = message.Attachments
    else:
        pass


#STEP 7 ----------------------------------------------
#get the content of the attachment

##????????????????????????????

【问题讨论】:

    标签: python outlook email-attachments win32com


    【解决方案1】:

    使用 Outlook 对象模型,您最好将附件保存为文件 (Attachment.SaveAsFile) - 请记住,MailItem.Attachments 属性返回 Attachments 集合,而不是单个 Attachment 对象 - 遍历所有集合中的附件,弄清楚你想要哪一个(如果有多个),并将其保存为文件。

    要直接访问文件附件数据而不另存为文件,您需要使用扩展 MAPI(仅限 C++ 或 Delphi)或Redemption(任何语言,我是它的作者)。

    【讨论】: