兑换附件文件名转义不同于 Outlook

Redemption attachement filename escaping differs from Outlook

我们正在尝试使用 Redemption 保存用户选择的附件,但偶然发现 VSTO 和 Redemption 之间的文件名转义不一致。我们做什么:

  1. 通过附件上下文菜单将 attachmentSelection[1] 索引和文件名以及消息 entryId 和 storeId 保存到数据库。
  2. 一段时间后(甚至可能在 Outlook 重启后)我们需要将此附件保存到文件中。为此,我们通过 ID 获取带有 Redemption 的电子邮件,通过索引获取附件 (rdoMail.Attachments[index]) 并确保文件名匹配,因为根据此: https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.outlook.attachment.index?view=outlook-pia#Microsoft_Office_Interop_Outlook_Attachment_Index index 属性 仅在当前会话期间有效。虽然不清楚他们的意思。如果电子邮件已保存并已发送,是否可以更改?还是收到了?
  3. 回复邮件VSTO Attachment.Filename是"RE Test.msg",RDOAttachment.Filename是"RE_ Test.msg"(这是另一封邮件的msg附件)。

所以,问题是:

  1. 为什么不同,是否在某处记录了它?例如,我们能否将兑换文件名的 _ 替换为 string.Empty 或其他情况?
  2. 或者也许有某种方法可以通过某种方式从 Outlook 附件对象中获取 RDOAttachment?
  3. 我们可以相信兑换附件索引与 Outlook 索引相同吗?
  1. 听起来您正在处理嵌入式邮件附件 - 与公开 PR_ATTACH_LONG_FILENAME MAPI 属性 的常规按值附件不同,没有固有文件名 属性 用于嵌入式附件。 OOM 和 Redemption 都从嵌入的消息主题生成 属性,您可以通过 RDOAttachment.EmbeddedMsg.Subject 访问该主题。 OOM 根本不公开嵌入的邮件附件。

  2. 是的,使用RDOSession.GetRDOObjectFromOUtlookObject方法

  3. 索引通常不会改变,但也有可能。 MAPI 本身使用 PR_ATTACH_NUM 来使用 IMessage::OpenAttach 打开附件,但根据邮件的打开方式可能会有所不同 - 从 MailItem.MAPIOBJECT 返回的假 IMessage 可能具有不同的值 PR_ATTACH_NUM 来自商店提供商返回的本机消息。