我有一个使用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。
答案 0 :(得分:2)
如果您使用的是C ++或MAPI,则可以使用扩展MAPI将PR_ATTACH_DATA_BIN属性作为IStream打开。
在VFP中,您可以尝试Redemption - Safe*Item和RDO对象系列都会公开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是您使用第三方库的最佳选择。