创建邮件附件

适用于:Outlook 2013 | Outlook 2016

邮件附件是可以随邮件一起发送或保存的一些附加数据,例如文件、另一封邮件或 OLE 对象。 每个附件都有一个属性集合,用于标识它并描述其类型和呈现方式。 与收件人一样,邮件附件只能通过其所属的邮件进行访问。 因此,要使附件可用,其邮件必须处于打开状态。

创建邮件附件

  1. 调用消息的 IMessage::CreateAttach 方法,并将 NULL 作为接口标识符传递。 CreateAttach 返回一个唯一标识邮件中的新附件的数字。 附件编号存储在 PR_ATTACH_NUM (PidTagAttachNumber) 属性中,并且仅在包含附件的邮件处于打开状态时有效。

  2. 调用 IMAPIProp::SetProps 以设置 PR_ATTACH_METHOD (PidTagAttachMethod) ,以指示如何访问附件。 需要PR_ATTACH_METHOD 。 将其设置为:

    • ATTACH_BY_VALUE附件是否为二进制数据。

    • 如果附件是文件,则ATTACH_BY_REFERENCE、ATTACH_BY_REF_RESOLVE或ATTACH_BY_REF_ONLY。

    • ATTACH_EMBEDDED_MSG附件是否为邮件。

    • 如果附件是 OLE 对象,则ATTACH_OLE。

  3. 设置相应的附件数据属性:

  4. 设置 PR_ATTACH_RENDERING (PidTagAttachRendering) ,以保存文件或二进制附件的附件的图形表示形式。 不要为 OLE 对象(这些对象在内部存储呈现信息)或附加消息设置它。

  5. (PidTagRenderingPosition) 设置PR_RENDERING_POSITION,以指示附件的显示位置。 PR_RENDERING_POSITION 仅适用于设置 PR_BODY 属性的客户端。 如果仅支持 PR_RTF_COMPRESSED,请将以下占位符信息放在压缩的流中:

    \objattph

    若要设置 PR_RENDERING_POSITION,请分配一个数字来表示字符序号偏移量,第一个字符 PR_BODY 为 0(如果需要知道在邮件中呈现附件的位置)或0xFFFFFFFF(如果不在 PR_BODY内呈现附件)。

  6. PR_ATTACH_FILENAME (PidTagAttachFilename) 设置为指示文件附件的文件的短名称, PR_ATTACH_LONG_FILENAME (PidTagAttachLongFilename) ,以指示处理长文件名格式的平台上支持的文件的名称。 这两个属性都是可选的。 但是,如果设置 PR_ATTACH_LONG_FILENAME,也设置 PR_ATTACH_FILENAME

  7. 设置 PR_DISPLAY_NAME (PidTagDisplayName) ,以指示可在对话框中显示的附件的名称。 PR_DISPLAY_NAME是可选的。

设置PR_ATTACH_DATA_BIN

  1. 调用 IMAPIProp::OpenProperty 以使用 IStream 接口打开 属性。

  2. 如果文件包含数据且文件处于打开状态,或者需要显式控制缓冲区大小,请在循环中调用 IStream::Write 以将数据置于流中。

  3. 另一个选项是调用 OpenStreamOnFile 以创建流以访问数据文件,然后调用此流的 IStream::CopyTo 方法将数据复制到 OpenProperty 返回的流。

  4. 调用新流的 IStream::Commit 方法。

设置PR_ATTACH_DATA_OBJ

  1. 调用 IMAPIProp::OpenProperty 以使用 IStreamDocfile 接口打开 属性,以创建适用于结构化存储的流。 IStreamDocfile 由消息存储提供程序实现,为客户端提供更高性能的方式来存储和检索结构化存储。 IStreamDocfile 接口与 IStream 相同,但保证将流的内容格式化为结构化存储。 如果此调用成功,请使用设置 PR_ATTACH_DATA_BIN的步骤创建流。

  2. 如果 OpenProperty 失败:

    1. 再次调用 OpenProperty ,请求 IStorage

    2. 调用 StgOpenStorage 以打开 OLE 对象并返回存储对象。

    3. 调用返回的存储对象的 IStorage::CopyTo 方法以复制到从 OpenProperty 返回的存储对象。

    4. 调用新存储对象的 IStorage::Commit 方法。

设置PR_ATTACH_PATHNAME

  1. 分配 SPropValue 结构,将 ulPropTag 成员设置为 PR_ATTACH_PATHNAME ,将 Value.LPSZ 成员设置为表示文件名的字符串。

  2. 调用附件的 IMAPIProp::SetProps 方法。

注意

如果平台支持长文件名,请同时设置 PR_ATTACH_PATHNAMEPR_ATTACH_LONG_PATHNAME。 可能需要进行操作系统调用才能检索短文件名。

另请参阅