0

我有一个使用 Outlook 自动化从 Visual FoxPro 读取和发送电子邮件的程序。

我有检索和保存附件的功能,但我想读取字符串的附件内容而不将文件保存到磁盘。

在下面的示例中,我实例化了 Outlook,选取了一个命名空间和对当前用户收件箱的引用。然后,我选择对任意消息(收件箱中的编号 32)的引用,以及对消息附件的引用。

oOutlook = createobject('Outlook.Application')
oNamespace = oOutlook.GetNamespace('MAPI')
oInbox = oNamespace.GetDefaultFolder(olFolderInbox)
oMessage = Inbox.Items[32]
oAttachment = oMessage.Attachments[1]

在这一点上,我会打电话:

oAttachment.SaveAsFile('C:\Example\File1.xml')

将文件保存到磁盘。

我想要做的是将文件的内容读入字符串,而不将其保存到磁盘。

在这个特定的实例中,文件是 XML。

4

2 回答 2

2

如果您使用的是 C++ 或 MAPI,则可以使用扩展 MAPI 将 PR_ATTACH_DATA_BIN 属性作为 IStream 打开。

在 VFP 中,您可以尝试Redemption - Safe*ItemRDO系列对象都公开了 AsArray 属性(以及 AsText 和 AsStream)。

在 Outlook 2007 及更高版本中,您还可以使用 Attachment.PropertyAccessor.GetProperty 来读取 PR_ATTACH_DATA_BIN 属性(DASL 名称“http://schemas.microsoft.com/mapi/proptag/0x37010102")

于 2013-10-29T13:57:47.523 回答
0

不幸的是,如果 Outlook 附件的大小大于 8KB,则无法在不使用第三方库的情况下将其存储到内存中。

在 Outlook 2007 中,如果附件小于 8KB,您可以调用 Attachment.PropertyAccessor.GetProperty 将 PR_ATTACH_DATA_BIN 属性读取到内存中。

如前所述,如果您要使用第三方库,那么Redemption是最好的选择。

于 2015-01-08T11:12:11.883 回答