从 Outlook 检索嵌入式 MSG 附件的 DragDrop EventArgs 的内容将拖动到控件上

本文关键字:拖动 控件 EventArgs DragDrop 检索 Outlook 嵌入式 MSG | 更新日期: 2023-09-27 18:36:26

我有一个应用程序,其中拖放了文件系统中的文件,来自Outlook的电子邮件或来自Outlook的附件,然后代码将它们保存在文件系统文件夹中,以便以后上传到SharePoint。

除了当我需要识别附件的内容是电子邮件(即电子邮件上的电子邮件附件 - 嵌入式味精)时,这一切都很好,其中文件内容为空。有什么方法可以访问电子邮件的内容以另存为.msg文件吗?

以下代码片段为非电子邮件但对于电子邮件类型为 null 的附件正确创建MemoryStream

void DoDrop(object sender, DragEventArgs e)
{
    var memoryStream = (MemoryStream) eventArgs.Data.GetData("FileContents", true);
}

从 Outlook 检索嵌入式 MSG 附件的 DragDrop EventArgs 的内容将拖动到控件上

我无法重现此行为。我使用了上面的示例代码,它可以完美地从资源管理器预览窗格或检查器窗口中拖动嵌入式 MSG。关于嵌入式味精,您一定没有与我们分享一些东西。附件类型是什么?

我还建议您查看 Outlook 拖放的代码项目示例。您的示例代码不考虑何时将多个项目拖放到应用程序上 - 如果用户选择 (2) 附件、(3) 电子邮件、(5) 文件等,它只会采用第一项。

我有一个扩展的列表框控件,我 vb.net 处理拖放操作,包括来自Outlook的电子邮件。我有与您在原始帖子中指出的相同问题。删除由嵌入.msg文件组成的附件时,GetData 返回 null 的文件内容。目前,我只是向用户显示一条消息,指示他们应该先尝试将附件放在桌面上,然后将其拖到应用程序中。这似乎有效,因为Windows操作系统负责提取数据并将其存储为.msg文件(可以自行正确拖放)。

我还找到了一些有关如何执行此操作的 c# 示例,但在 vb.net 中重新创建它们时没有成功。最有帮助的是 codeproject.com,由David Ewen于2008年7月28日称为"C#中的Outlook Drag and Drop"。它处理多个附件和作为Outlook消息的附件。由于它是用 C# 编写的,也许您会发现它有一些用处。

我知道我问是违反规则的,但如果你找到了比我提供的更好的解决方案,我会感兴趣。