【问题标题】:VFP: How can I access the contents of an Outlook attachmentVFP:如何访问 Outlook 附件的内容
【发布时间】:2013-10-29 11:50:51
【问题描述】:

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

【问题讨论】:

    标签: xml automation outlook visual-foxpro


    【解决方案1】:

    如果您使用的是 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")

    【讨论】:

    • 谢谢 Dmitry,我确实关注 Redemption,但无法获得使用它的权力的许可 :) 我使用的是 Outlook 2007,所以虽然我可以使用架构调用 GetProperty 方法,不幸的是,我的附件文件大小被限制为 8KB:对于我的目的来说太小了。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-15
      相关资源
      最近更新 更多