创建邮件附件
适用于:Outlook 2013 | Outlook 2016
邮件附件是可以随邮件一起发送或保存的一些附加数据,例如文件、另一封邮件或 OLE 对象。 每个附件都有一个属性集合,用于标识它并描述其类型和呈现方式。 与收件人一样,邮件附件只能通过其所属的邮件进行访问。 因此,要使附件可用,其邮件必须处于打开状态。
调用消息的 IMessage::CreateAttach 方法,并将 NULL 作为接口标识符传递。 CreateAttach 返回一个唯一标识邮件中的新附件的数字。 附件编号存储在 PR_ATTACH_NUM (PidTagAttachNumber) 属性中,并且仅在包含附件的邮件处于打开状态时有效。
调用 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。
设置相应的附件数据属性:
PR_ATTACH_DATA_BIN (二进制数据和 OLE 1 对象的 PidTagAttachDataBinary) 。
PR_ATTACH_PATHNAME 文件 (PidTagAttachPathname) 。
PR_ATTACH_DATA_OBJ (消息和 OLE 2 对象的 PidTagAttachDataObject) 。
设置 PR_ATTACH_RENDERING (PidTagAttachRendering) ,以保存文件或二进制附件的附件的图形表示形式。 不要为 OLE 对象(这些对象在内部存储呈现信息)或附加消息设置它。
(PidTagRenderingPosition) 设置PR_RENDERING_POSITION,以指示附件的显示位置。 PR_RENDERING_POSITION 仅适用于设置 PR_BODY 属性的客户端。 如果仅支持 PR_RTF_COMPRESSED,请将以下占位符信息放在压缩的流中:
\objattph
若要设置 PR_RENDERING_POSITION,请分配一个数字来表示字符序号偏移量,第一个字符 PR_BODY 为 0(如果需要知道在邮件中呈现附件的位置)或0xFFFFFFFF(如果不在 PR_BODY内呈现附件)。
将 PR_ATTACH_FILENAME (PidTagAttachFilename) 设置为指示文件附件的文件的短名称, PR_ATTACH_LONG_FILENAME (PidTagAttachLongFilename) ,以指示处理长文件名格式的平台上支持的文件的名称。 这两个属性都是可选的。 但是,如果设置 PR_ATTACH_LONG_FILENAME,也设置 PR_ATTACH_FILENAME。
设置 PR_DISPLAY_NAME (PidTagDisplayName) ,以指示可在对话框中显示的附件的名称。 PR_DISPLAY_NAME是可选的。
调用 IMAPIProp::OpenProperty 以使用 IStream 接口打开 属性。
如果文件包含数据且文件处于打开状态,或者需要显式控制缓冲区大小,请在循环中调用 IStream::Write 以将数据置于流中。
另一个选项是调用 OpenStreamOnFile 以创建流以访问数据文件,然后调用此流的 IStream::CopyTo 方法将数据复制到 OpenProperty 返回的流。
调用新流的 IStream::Commit 方法。
调用 IMAPIProp::OpenProperty 以使用 IStreamDocfile 接口打开 属性,以创建适用于结构化存储的流。 IStreamDocfile 由消息存储提供程序实现,为客户端提供更高性能的方式来存储和检索结构化存储。 IStreamDocfile 接口与 IStream 相同,但保证将流的内容格式化为结构化存储。 如果此调用成功,请使用设置 PR_ATTACH_DATA_BIN的步骤创建流。
如果 OpenProperty 失败:
再次调用 OpenProperty ,请求 IStorage。
调用 StgOpenStorage 以打开 OLE 对象并返回存储对象。
调用返回的存储对象的 IStorage::CopyTo 方法以复制到从 OpenProperty 返回的存储对象。
调用新存储对象的 IStorage::Commit 方法。
分配 SPropValue 结构,将 ulPropTag 成员设置为 PR_ATTACH_PATHNAME ,将 Value.LPSZ 成员设置为表示文件名的字符串。
调用附件的 IMAPIProp::SetProps 方法。
备注
如果平台支持长文件名,请同时设置 PR_ATTACH_PATHNAME 和 PR_ATTACH_LONG_PATHNAME。 可能需要进行操作系统调用才能检索短文件名。