将 Outlook 附件保存到内存而不是磁盘
Save Outlook attachment to memory instead of disk
我每天在电子邮件中有几百个 Excel 附件,我想从中提取适当的数据并将其保存到数据库中。我想避免将每个附件保存到磁盘只是为了从磁盘重新打开以读取,因为我再也不需要将文件保存到磁盘了。对于这个项目,当然,我可以删除它们,但应该有更好的方法。
这是我目前所做的
outlook = Dispatch("Outlook.Application").GetNamespace("MAPI")
folder = outlook.Folders[blah].Folders[blahblah]
for item in folder.items:
for att in item.Attachments:
att.SaveAsFile(???) # This is where I need something cool, like stream or bytes or something that I don't understand
# do something with the file, either read with pandas or openpyxl
如果我什至可以绕过保存并让 pandas
/ openpyxl
在不保存的情况下读取它,那就太好了,但是他们都不能直接读取 att
.
Outlook 对象模型不允许您这样做:Attachment
。SaveAsFile 只允许指定有效的文件名。
在扩展 MAPI 级别(仅限 C++ 或 Delphi),访问附件数据的唯一方法(扩展 MAPI 对文件一无所知)是打开 PR_ATTACH_DATA_BIN
MAPI 属性 作为 IStream
接口:IAttach::OpenProperty(PR_ATTACH_DATA_BIN, IID_IStream, ...)
。然后,您可以直接从 IStream
界面检索数据。
如果使用 Redemption (any language, I am its author) is an option, it exposes RDOAttachment.AsStream
/ AsArray
/ AsText
允许访问原始附件数据而无需先将其保存为文件的属性。
我每天在电子邮件中有几百个 Excel 附件,我想从中提取适当的数据并将其保存到数据库中。我想避免将每个附件保存到磁盘只是为了从磁盘重新打开以读取,因为我再也不需要将文件保存到磁盘了。对于这个项目,当然,我可以删除它们,但应该有更好的方法。
这是我目前所做的
outlook = Dispatch("Outlook.Application").GetNamespace("MAPI")
folder = outlook.Folders[blah].Folders[blahblah]
for item in folder.items:
for att in item.Attachments:
att.SaveAsFile(???) # This is where I need something cool, like stream or bytes or something that I don't understand
# do something with the file, either read with pandas or openpyxl
如果我什至可以绕过保存并让 pandas
/ openpyxl
在不保存的情况下读取它,那就太好了,但是他们都不能直接读取 att
.
Outlook 对象模型不允许您这样做:Attachment
。SaveAsFile 只允许指定有效的文件名。
在扩展 MAPI 级别(仅限 C++ 或 Delphi),访问附件数据的唯一方法(扩展 MAPI 对文件一无所知)是打开 PR_ATTACH_DATA_BIN
MAPI 属性 作为 IStream
接口:IAttach::OpenProperty(PR_ATTACH_DATA_BIN, IID_IStream, ...)
。然后,您可以直接从 IStream
界面检索数据。
如果使用 Redemption (any language, I am its author) is an option, it exposes RDOAttachment.AsStream
/ AsArray
/ AsText
允许访问原始附件数据而无需先将其保存为文件的属性。