如何使用 VBA 在内存中创建 Outlook 附件

How to create an outlook attachment in-memory using VBA

我正在使用 VBA 发送带有文本附件的电子邮件。到目前为止,我需要在磁盘上物理创建文件,然后引用它的路径。

这可以完全在内存中完成吗?

    Dim outlook As Object, mail As Object, path As string

    Set outlook = CreateObject("Outlook.Application")
    Set mail = outlook.CreateItem(0)

    ' write file contents
    path = Environ("temp") + "\file.txt"
    Open path For Output As #1
    Print #1, "This is my txt"
    Close #1

    ' attach file
    With mail
        .To = "me@awesome.com"
        .body = "This is a test"
        .attachments.Add CStr(path)
        .send
    End With

    Set mail = Nothing
    Set outlook = Nothing

Outlook 对象模型没有为此提供任何 属性 或方法。 Attachments class 的 Add 方法只接受文件路径。更准确地说,附件的来源可以是一个文件(由带文件名的完整文件系统路径表示)或构成附件的 Outlook 项目。

但是,您可以使用构建 Outlook 的低级 API - 扩展 MAPI。或者考虑围绕此 API 的任何第三方包装器,例如 RedemptionPR_ATTACH_DATA_BIN 包含通常通过对象链接和嵌入 (OLE) IStream 接口访问的二进制附件数据。当 PR_ATTACH_METHOD (PidTagAttachMethod) 属性 的值为 ATTACH_BY_VALUE 时,此 属性 持有附件,这是通常的附件方法,也是唯一需要的附件支持一下。