【问题标题】:Redemption attachement filename escaping differs from Outlook兑换附件文件名转义与 Outlook 不同
【发布时间】:2019-11-19 22:47:16
【问题描述】:

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

  1. 通过附件上下文菜单将 attachmentSelection[1] 索引和文件名保存到 db 以及消息 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 来代替 Redemption 文件名吗?
  2. 或者也许有办法以某种方式从 Outlook 附件对象中获取 RDOAttachment?
  3. 我们可以相信兑换附件索引与 Outlook 1 相同吗?

【问题讨论】:

    标签: outlook vsto outlook-redemption


    【解决方案1】:
    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 值由商店提供商返回。

    【讨论】:

    • 感谢您的信息!我们最终从使用 Redemption 的选择中获得了这些邮件,并从那里获得了附件。无论如何,我们正在慢慢迁移到使用 Redemption 而不是 OOM。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    相关资源
    最近更新 更多