创建邮件文本
适用于:Outlook 2013 | Outlook 2016
尽管某些邮件只由收件人列表和主题行组成,但大多数邮件的内容,特别是 IPM。记下消息,包括文本。 邮件文本可以是纯文本或格式,并存储在三个属性中: PR_BODY (PidTagBody) 、 PR_HTML (PidTagHtml) 和 PR_RTF_COMPRESSED (PidTagRtfCompressed) 。
如果客户端是基于纯文本的,请设置 PR_BODY。 如果支持 RTF 格式 (RTF) 中的格式化文本,请仅 PR_RTF_COMPRESSED 或同时设置 PR_RTF_COMPRESSED 和 PR_BODY,具体取决于所使用的消息存储提供程序。 当 RTF 感知客户端使用 RTF 感知消息存储时,它仅设置 PR_RTF_COMPRESSED 。 当 RTF 感知客户端使用非 RTF 感知消息存储时,它会设置这两个属性。 如果客户端支持 HTML,请设置 PR_HTML 属性。
确定邮件存储是否支持 RTF 格式
调用消息存储的 IMAPIProp::GetProps 方法以检索 PR_STORE_SUPPORT_MASK (PidTagStoreSupportMask) 属性。
检查STORE_RTF_OK位。 如果设置了STORE_RTF_OK,则消息存储提供程序支持 RTF 文本。 如果未设置,消息存储提供程序仅支持纯文本。
确定邮件存储是否支持 HTML
调用消息存储的 IMAPIProp::GetProps 方法以检索 PR_STORE_SUPPORT_MASK 属性。
检查STORE_HTML_OK位。 如果设置了STORE_HTML_OK,则消息存储提供程序支持 HTML 文本。
设置PR_RTF_COMPRESSED
调用消息的 IMAPIProp::OpenProperty 方法以打开 PR_RTF_COMPRESSED 属性,将 IID_IStream 指定为接口标识符并设置MAPI_CREATE标志。
调用 WrapCompressedRTFStream 函数,如果消息存储的 PR_STORE_SUPPORT_MASK 属性中设置了STORE_UNCOMPRESSED_RTF位,则传递 STORE_UNCOMPRESSED_RTF 标志。
通过调用其 IUnknown::Release 方法释放原始流。
调用 IStream::Write 或 IStream::CopyTo 将消息文本写入从 WrapCompressedRTFStream 返回的流。
对从 OpenProperty 方法返回的流调用 Commit 和 Release 方法。
此时,如果消息存储提供程序支持 RTF,则你已完成所有必需的操作。 可以依赖于消息存储提供程序来处理消息内容和格式的同步,并在必要时创建 PR_BODY 属性。 RTF 感知消息存储调用 RTFSync 来处理同步。 如果RTF_SYNC_BODY_CHANGED标志设置为 TRUE,则提供程序将重新计算 PR_BODY 属性。
如果消息存储提供程序不支持 RTF,则还必须通过设置 PR_BODY 属性添加非 RTF 消息内容。
设置PR_HTML
调用 IMAPIProp::OpenProperty 方法以使用 IStream 接口打开 PR_HTML 属性。
调用 IStream::Write 将消息文本数据写入从 OpenProperty 返回的流。
在流上调用 IStream::Commit 和 IUnknown::Release 以提交更改并释放其内存。
设置PR_BODY
调用 IMAPIProp::OpenProperty 方法以使用 IStream 接口打开 PR_BODY 属性。
调用 IStream::Write 将消息文本数据写入从 OpenProperty 返回的流。
调用 RTFSync 函数以将文本与格式同步。 由于这是一封新邮件,因此请同时设置RTF_SYNC_RTF_CHANGED和RTF_SYNC_BODY_CHANGED标志,以指示消息文本的 RTF 和纯文本版本都已更改。 RTFSync 将设置消息存储提供程序所需的多个相关属性,例如 PR_RTF_IN_SYNC (PidTagRtfInSync) ,并将其写入消息。
在流上调用 IStream::Commit 和 IUnknown::Release 以提交更改并释放其内存。