兑换附件文件名转义不同于 Outlook
Redemption attachement filename escaping differs from Outlook
我们正在尝试使用 Redemption 保存用户选择的附件,但偶然发现 VSTO 和 Redemption 之间的文件名转义不一致。我们做什么:
- 通过附件上下文菜单将 attachmentSelection[1] 索引和文件名以及消息 entryId 和 storeId 保存到数据库。
- 一段时间后(甚至可能在 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 属性 仅在当前会话期间有效。虽然不清楚他们的意思。如果电子邮件已保存并已发送,是否可以更改?还是收到了?
- 回复邮件VSTO Attachment.Filename是"RE Test.msg",RDOAttachment.Filename是"RE_ Test.msg"(这是另一封邮件的msg附件)。
所以,问题是:
- 为什么不同,是否在某处记录了它?例如,我们能否将兑换文件名的 _ 替换为 string.Empty 或其他情况?
- 或者也许有某种方法可以通过某种方式从 Outlook 附件对象中获取 RDOAttachment?
- 我们可以相信兑换附件索引与 Outlook 索引相同吗?
听起来您正在处理嵌入式邮件附件 - 与公开 PR_ATTACH_LONG_FILENAME
MAPI 属性 的常规按值附件不同,没有固有文件名 属性 用于嵌入式附件。 OOM 和 Redemption 都从嵌入的消息主题生成 属性,您可以通过 RDOAttachment.EmbeddedMsg.Subject
访问该主题。 OOM 根本不公开嵌入的邮件附件。
是的,使用RDOSession.GetRDOObjectFromOUtlookObject
方法
索引通常不会改变,但也有可能。 MAPI 本身使用 PR_ATTACH_NUM
来使用 IMessage::OpenAttach 打开附件,但根据邮件的打开方式可能会有所不同 - 从 MailItem.MAPIOBJECT
返回的假 IMessage 可能具有不同的值 PR_ATTACH_NUM
来自商店提供商返回的本机消息。
我们正在尝试使用 Redemption 保存用户选择的附件,但偶然发现 VSTO 和 Redemption 之间的文件名转义不一致。我们做什么:
- 通过附件上下文菜单将 attachmentSelection[1] 索引和文件名以及消息 entryId 和 storeId 保存到数据库。
- 一段时间后(甚至可能在 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 属性 仅在当前会话期间有效。虽然不清楚他们的意思。如果电子邮件已保存并已发送,是否可以更改?还是收到了?
- 回复邮件VSTO Attachment.Filename是"RE Test.msg",RDOAttachment.Filename是"RE_ Test.msg"(这是另一封邮件的msg附件)。
所以,问题是:
- 为什么不同,是否在某处记录了它?例如,我们能否将兑换文件名的 _ 替换为 string.Empty 或其他情况?
- 或者也许有某种方法可以通过某种方式从 Outlook 附件对象中获取 RDOAttachment?
- 我们可以相信兑换附件索引与 Outlook 索引相同吗?
听起来您正在处理嵌入式邮件附件 - 与公开
PR_ATTACH_LONG_FILENAME
MAPI 属性 的常规按值附件不同,没有固有文件名 属性 用于嵌入式附件。 OOM 和 Redemption 都从嵌入的消息主题生成 属性,您可以通过RDOAttachment.EmbeddedMsg.Subject
访问该主题。 OOM 根本不公开嵌入的邮件附件。是的,使用
RDOSession.GetRDOObjectFromOUtlookObject
方法索引通常不会改变,但也有可能。 MAPI 本身使用
PR_ATTACH_NUM
来使用 IMessage::OpenAttach 打开附件,但根据邮件的打开方式可能会有所不同 - 从MailItem.MAPIOBJECT
返回的假 IMessage 可能具有不同的值PR_ATTACH_NUM
来自商店提供商返回的本机消息。