首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Outlook .MSG和.OFT文件格式有区别吗?

Outlook .MSG和.OFT文件格式有区别吗?
EN

Stack Overflow用户
提问于 2011-10-31 18:11:52
回答 2查看 16.5K关注 0票数 6

这个问题有点遥不可及,但我花了几个小时的时间却没有结果。我有一些代码可以在open服务器上生成电子邮件文件,并允许用户下载该电子邮件并在Outlook中打开它。从这里开始,他们可以在发送邮件给一群人之前对电子邮件进行各种手动修改。

现在,我生成一个.OFT文件,它基本上是一个电子邮件模板。我想要做的是生成一个.MSG文件,这是一个实际的电子邮件。从二进制的角度来看,这些文件格式似乎是相同的。它们具有相同的流ID和属性等等。

我的方法是首先在Outlook中创建一个空白的电子邮件消息,然后将其保存到一个名为Base.oft的文件中。在我的代码中,我打开文档并修改流ID __substg1.0_1013001E,这是HTML主体的ID。然后保存该文件并将其写入cilent。这工作得很好。

我用MSG格式尝试了同样的方法。我创建了一个空白的电子邮件消息,并将其保存为Base.msg,并修改相同的Stream。如果我查看结果文件,新的主体实际上在那里并保存。然而,如果我打开电子邮件,身体仍然是空白的。

更奇怪的是,如果我在Outlook中输入一个正文并将其保存到基本文件中,我可以在流0_1013001E下看到该主体。如果然后使用不同的主体修改该流,则可以验证新主体确实保存在文件中,但如果在Outlook中打开消息,则会看到旧的原始正文。就像电子邮件正文存储在.MSG格式的文件中的不同位置一样,但是我已经查看了每个流,找不到任何看起来可能是电子邮件体的东西。

也许.MSG文件是加密的,或者它们的主体是以某种专有的二进制格式存储的,而不是.OFT文件?希望有人对此有一些洞察力,因为我在互联网上搜索,基本上没有发现这些格式。

更新:

.MSG格式似乎将主体存储在流ID __substg1.0_10090102中--它是以某种二进制形式编码的(不确定是什么)。如果删除流(或将其设置为单个\0 ),文件就会损坏。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-01 21:02:54

首先,要查找更多有关此主题和相关主题的信息,请从原始子流编号和google获取相应的MAPI属性。例如,1013是PR_HTML,1009是PR_RTF_COMPRESSED。MAPI有将主体从一种格式同步到另一种格式的方法。

有关所有与内容相关的MAPI属性(即.MSG文件中的不同“流”),请参见MSDN上的.MSG文章。

若要编写PR_RTF_COMPRESSED,请将流包装在WrapCompressedStream中。另一方面,在特定情况下,您可能希望避免代码中的MAPI-依赖关系,因此您最好找到PR_STORE_SUPPORT_MASK并设置STORE_UNCOMPRESSED_RTF位。这将允许您在PR_RTF_COMPRESSED子流中直接使用RTF。或者,如果你觉得很勇敢的话,你就会看到漂亮的html包在rtf里。

所有这些都不适合那些心灰意冷的人,但是看到您已经在处理原始的.MSG子流编写,我猜这是可行的。

票数 4
EN

Stack Overflow用户

发布于 2014-02-27 19:54:38

当谈到格式时,没有什么不同。唯一的区别是,CLSID_TemplateMessage文件({0006F046-0000-C000-000000000046})是存储类(WriteClassStg),而MSG文件使用CLSID_MailMessage ({00020D0B-0000-0000-C000-000000000046})。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7957827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档