VFP:如何访问Outlook附件的内容

时间:2013-10-29 11:50:51

标签: xml automation outlook visual-foxpro

我有一个使用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。

2 个答案:

答案 0 :(得分: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")

答案 1 :(得分:0)

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

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

如上所述,Redemption是您使用第三方库的最佳选择。