这个问题有点长镜头,但我花了几个小时无济于事。我有一些代码可以在网络服务器上生成电子邮件文件,并允许用户下载该电子邮件并在 Outlook 中打开它。从这里,他们可以在将电子邮件发送给一群人之前对电子邮件进行各种手动更改。
现在,我生成了一个 .OFT 文件,它基本上是一个电子邮件模板。我想做的是生成一个 .MSG 文件,这是一封实际的电子邮件。从二进制的角度来看,这些文件格式似乎是相同的。它们具有相同的流 ID 和属性等。
我的方法是首先在 Outlook 中创建一个空白电子邮件,然后将其保存到一个名为 Base.oft 的文件中。在我的代码中,我打开文档并修改 Stream ID __substg1.0_1013001E
,它是 HTML 电子邮件正文的 ID。然后我保存文件并将其写入 cilent。这完美地工作。
我尝试了使用 MSG 格式的相同方法。我创建了一个空白电子邮件,将其保存为 Base.msg,并修改了相同的 Stream ID。如果我查看生成的文件,新的正文实际上就在那里并保存了。但是,如果我打开电子邮件,正文仍然是空白的。
更奇怪的是,如果我在 Outlook 中输入正文并将其保存到基本文件中,我可以在流 0_1013001E 下看到该正文。如果我随后用不同的正文修改该流,我可以验证新正文确实保存在文件中,但如果我在 Outlook 中打开邮件,我会看到旧的原始正文。就好像电子邮件正文存储在 .MSG 格式的文件中的不同位置一样,但是我查看了每个流,找不到任何其他看起来可能是电子邮件正文的内容。
也许 .MSG 文件是加密的,或者它们的主体以某种专有的二进制格式存储,而不是 .OFT 文件?希望有人对此有所了解,因为我在互联网上搜索并基本上没有发现这些格式。
更新:
似乎 .MSG 格式将主体存储在 Stream ID 中__substg1.0_10090102
- 它以某种二进制形式编码(不确定是什么。)如果我删除流(或将其设置为单个\0
,文件将损坏。