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

2023-11-23

这个问题有点遥远,但我花了几个小时却无济于事。我有一些代码可以在网络服务器上生成电子邮件文件,并允许用户下载该电子邮件并在 Outlook 中打开它。从这里,他们可以在将电子邮件发送给一群人之前对电子邮件进行各种手动更改。

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

我的方法是首先在 Outlook 中创建一封空白电子邮件,然后将其保存到名为 Base.oft 的文件中。在我的代码中,我打开文档并修改 Stream ID__substg1.0_1013001E这是 HTML 电子邮件正文的 ID。然后我保存文件并将其写给客户端。这非常有效。

我对 MSG 格式尝试了相同的方法。我创建了一封空白电子邮件,将其另存为 Base.msg,并修改相同的流 ID。如果我查看生成的文件,就会发现新的正文实际上位于其中并已保存。但是,如果我打开电子邮件,正文仍然是空白。

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

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

Update:

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


首先,要查找有关此主题和相关主题的更多信息,请远离原始子流编号并通过 google 搜索相应的 MAPI 属性。例如,1013 是PR_HTML1009 是PR_RTF_COMPRESSED。 MAPI 具有将正文从一种格式同步到另一种格式的方法。

See thisMSDN 上的文章,详细概述了所有与内容相关的 MAPI 属性(即 .MSG 文件内的不同“流”)。

要写入 PR_RTF_COMPRESSED,请将流包装在里面包裹压缩流。另一方面,在您的特定情况下,您可能希望避免代码中的 MAPI 依赖性,因此也许您最好找到PR_STORE_SUPPORT_MASK并设置STORE_UNCOMPRESSED_RTF少量。这将允许您在 PR_RTF_COMPRESSED 子流中使用直接 RTF。如果您有勇气的话,或者 Outlooks 喜欢 html-wrapped-in-rtf。

这些东西都不适合胆小的人,但是看到您已经如何处理原始 .MSG 子流写入,我猜这是可行的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Outlook .MSG 和 .OFT 文件格式之间有区别吗? 的相关文章

随机推荐

  • 安装 Tensorflow 时出错 - Python 3.8

    我是编程新手 正在学习必须安装 Tensorflow 的课程 问题是我正在使用 Python 3 8 据我所知 Tensorflow 不支持它 我已经下载了 Python 3 6 但我不知道如何将其切换为默认的 python 版本 最好使用
  • 不同文化中的 JavaScript parseFloat

    我对 JavaScript 的 parseFloat 函数在世界不同地区的默认行为有疑问 在美国 如果对字符串 123 34 调用 parseFloat 您将得到浮点数 123 34 如果我在瑞典或巴西开发代码 并且他们使用逗号而不是句点作
  • 是否可以“git diff”2 个字符串?

    我有 2 个字符串 我想要它们之间的 git diff 我可以创建 file1 并添加 string1 作为其内容 然后我可以创建 file2 并添加 string2 作为其内容 然后我可以 git diff file1 和 file2 但
  • 配置错误:未满足包要求(sqlite3 > 3.7.4)

    我正在尝试按照以下说明在 Centos 7 上安装 php https www php net manual en install unix nginx php 我的nginx版本 nginx 1 19 0 我从下载了 php 7 4 6
  • React:useState 还是 useRef?

    我正在阅读有关 React 的内容useState and useRef at 挂钩常见问题解答 我对一些用例感到困惑 这些用例似乎同时具有 useRef 和 useState 的解决方案 而且我不确定哪种方式是正确的 来自 Hook 常见
  • 使两列高度相同

    我正在尝试制作 2 列设计 使用推特引导程序 有 2 根等高的柱子 让我们看这个例子 div class row fluid div class span2 ul li Item 1 li li Item 2 li li Item 3 li
  • 如何在依赖检查之前运行 Maven 插件

    我想在依赖项检查之前运行 maven install plugin 我怎样才能做到这一点 插件配置
  • 如何删除轮廓 mat-form-field 边框角半径

    我正在使用角材料轮廓垫形式场来设计形式 我得到了带有边框角半径的默认 mat form field 轮廓文本框视图 有什么方法可以删除轮廓 mat form field 的边框角半径并转换为方形文本框视图 我尝试使用以下内容更改角度材料 m
  • 在 XPath 中通过 concat() 换行(\n)?

    所以我的系统中有一个员工的 XML 文档
  • 如何在phpmyadmin中设置max_allowed_pa​​cket?

    我必须改变max allowed packetMySQL 中的大小使用phpmyadmin 但我不知道该怎么做 当我尝试时set global max allowed packet 10M in phpmyadmin它给出了这个错误 122
  • RMI 中可以通过引用传递吗?

    我读过各种有关使用 RMI 传递变量的文章 有些人说在 RMI 中不可能通过引用传递变量 例如 this one and this one 而其他人则说这是可能的 例如 this one this one and this one 有人可以
  • 使用唯一/随机名称存储文件

    使用新的 Firebase API 您可以从客户端代码将文件上传到云存储 这examples假设文件名在上传期间是已知的或静态的 Create a root reference var storageRef firebase storage
  • 如何使用语言环境将日期转换为 go 中的字符串?

    我这样将日期转换为字符串 d Format Mon 02 Jan 我得到类似的东西 Fri 27 Jan 如何切换区域设置并获取其他语言的字符串 你不能 Go 标准库不包含本地化的月份 日期和区域名称 这些名称被连接到time包裹 例如 返
  • NHibernate 无法将 MySQL 日期/时间值转换为 System.DateTime

    我收到 无法将 MySQL 日期 时间值转换为 System DateTime 错误 因为据我所知 我有一条 0000 00 00 00 00 00 的记录 现在 虽然数据不应该是这样的 它应该为空 但在某些情况下可能会发生这种情况 我不希
  • 如何从googletest中的异常中获取回溯信息?

    我正在尝试做一些半测试驱动的设计 有时当我实现一个新功能时 它会在某个地方出现异常 gtest 告诉我的只是异常是什么 并且没有给我任何回溯信息 如果我运行 gdb args gtest catch exceptions 0 它将在出现异常
  • 如何根据对象的属性对 json 或 jsonb 值内的数组中的对象进行排序?

    我有这个 pl pgsql 函数来聚合两个表中的行jsonb value data table 1 and data table 2 fk id是两个表中的公共外键 id DECLARE v my variable 1 jsonb v my
  • 127 及以上范围的正则表达式模式

    我需要一个正则表达式 使其匹配以下加上任何高于 127 的 ascii 即 7F 十六进制及以上 对于给定范围 以下效果很好 string pattern x00 x1F 尝试使用 or 运算符 管道 string pattern x00
  • 使用 javascript/jquery 生成页码?

    如何使用 javascript jquery 生成如下页码 如果选择第 5 页 我必须显示 3 4 和 6 7 以及 1 最后一页以及上一页 下一页 任何建议 EDIT 如何处理使用这些分页 div 的 json 数据 即 我的json数据
  • 如何使用 WebSocket 从 PHP 发送数据/文本进行处理?

    我在服务器上有一个进程充当 WebSocket 服务器 不是用 Ratchet 编写的 我希望能够使用 PHP 作为客户端 将数据发送到该进程 我发现了很多像这样作为 TCP 发送的示例
  • Outlook .MSG 和 .OFT 文件格式之间有区别吗?

    这个问题有点遥远 但我花了几个小时却无济于事 我有一些代码可以在网络服务器上生成电子邮件文件 并允许用户下载该电子邮件并在 Outlook 中打开它 从这里 他们可以在将电子邮件发送给一群人之前对电子邮件进行各种手动更改 现在 我生成一个