从剪贴板获取复制的电子邮件

Getting a copied email from the clipboard

我有一个显示目录内容的列表视图。我启用了拖放到列表视图中,以便用户可以将文件从 Windows 资源管理器并将其放入列表视图。然后我将这些文件复制到列表视图中显示的目录中。

如果您将电子邮件从 outlook 拖到桌面上或拖到 Windows 资源管理器中的文件夹中,它会创建电子邮件的 .msg 文件。 用户现在想从 outlook 中拖动电子邮件并将它们放入列表视图中。

当一封电子邮件在列表视图上是毒品时,它不会将其视为有效的 drag/drop 对象。光标是一个带有一条线的圆圈,而不是放置事件光标。

listView1_DragEnter 事件中我有

        if (e.Data.GetDataPresent(DataFormats.FileDrop))
        {
            e.Effect = DragDropEffects.All;
        }
        else
        {
            e.Effect = DragDropEffects.None;
        }

我已经尝试了 DataFormats.HTML,但也没有发现任何可删除的内容。有什么想法吗?

电子邮件是从 Outlook 的列表部分拖出的。

在列表视图的 DragEnter 事件中,return 以下 DragDropEffects:

private void listView_DragEnter(object sender, DragEventArgs e)
{
    e.Effect = DragDropEffects.All;
}

要提取和阅读 DragDrop 事件中的 Outlook 消息,我建议使用 this 库。使用起来非常简单:

private void listView_DragDrop(object sender, DragEventArgs e)
{
    OutlookDataObject dataObject = new OutlookDataObject(e.Data);

    //get the names and data streams of the files dropped
    string[] filenames = (string[])dataObject.GetData("FileGroupDescriptor");
    MemoryStream[] filestreams = (MemoryStream[])dataObject.GetData("FileContents");

    for (int fileIndex = 0; fileIndex < filenames.Length; fileIndex++)
    {
        string filename = filenames[fileIndex];
        MemoryStream filestream = filestreams[fileIndex];

        OutlookStorage.Message message = new OutlookStorage.Message(filestream);

        // do whatever you want with "message"

        message.Dispose();
    }
}