【问题标题】:How does Outlook know if an MSG file has been sent?Outlook 如何知道是否已发送 MSG 文件?
【发布时间】:2019-11-10 19:43:37
【问题描述】:

如果您开始在 Outlook 中编写电子邮件并将其从草稿拖到您的桌面,Outlook 将打开它并显示“发送”按钮可用且所有字段均可修改。

同样,如果您将收到的电子邮件拖到桌面,Outlook 将以只读模式打开 MSG 文件。

我希望在我的 c# 应用程序中添加一个功能,该功能可以读取发送的 MSG 文件,然后以草稿模式将其写回。到目前为止,我还没有找到任何有关这方面的信息。

【问题讨论】:

  • 我猜这是因为未发送的邮件中没有任何表明它已经发送的标题,并且收到的邮件包含所有这些标题包含在保存的邮件中。要么就是这样,要么当您将未发送的消息拖到桌面并将其打包以写入桌面时,它只是将其标记为未发送,并且还在将收到的消息发送到桌面时将其标记为未发送。可以肯定的是,您必须询问 MS 的 Outlook 团队。
  • 如果它在您的草稿文件夹中,则 Outlook 知道它尚未发送。如果它在您收到的文件夹中,则 Outlook 知道这是您收到的电子邮件。 Outlook 在从应用程序移动到桌面的剪贴板信息中包含一些状态标志是很简单的。当您将项目放到桌面上时,响应的应用程序可以使用该信息。

标签: c# outlook msg


【解决方案1】:

Outlook 会查看 PR_MESSAGE_FLAGS 属性中的 MSGFLAG_UNSENT 位(您可以在 OutlookSpy 中看到它 - 单击 Outlook 文件夹之一中的消息的 IMessage 按钮或在独立 MSG 文件的情况下单击 OpenIMsgOnIStg 按钮)。

Outlook 不允许您修改该标志 - MailItem.Sent 属性是只读的。此外,只能在第一次保存消息之前设置该位(如果您在 C++ 或 Delphi 中使用扩展 MAPI)。该限制不适用于独立的 MSG 文件 - MSGFLAG_UNSENT 位可以随时设置或取消设置。

如果使用Redemption 是一个选项,则其RDOMail.Sent 属性是可读写的。要打开独立的 MSG 文件,您可以使用 RDOSession.GetMessageFromMsgFile 方法(返回 RDOMail 对象) - 然后您可以修改 Sent 属性并调用 RDOMail.Save

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 2020-10-24
    • 2017-08-12
    • 1970-01-01
    相关资源
    最近更新 更多