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

时间:2016-03-03 19:17:08

标签: c# email outlook clipboard copy-paste

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

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

当电子邮件在列表视图上有毒时,它不会将其视为有效的拖放对象。光标是一个圆圈,通过它而不是放置事件光标。

listView1_DragEnter事件中我有

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

我已经尝试了DataFormats.HTML但是也没有看到任何东西掉落。有什么想法吗?

从Outlook的列表部分拖动电子邮件 enter image description here

1 个答案:

答案 0 :(得分:2)

在列表视图的DragEnter活动中,返回以下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();
    }
}