从outlook拖放到winform

时间:2014-11-17 14:41:36

标签: c# winforms drag-and-drop outlook

我想添加一些功能,使用户能够将项目从outllok拖放到Windows窗体应用程序,而不使用Microsoft.Office.Interop.Outlook参考,这样我就可以支持所有版本的outlook。 我需要检测项目是否是:电子邮件,会议或任务,我还需要能够从项目中提取所有字段。 我在CodeProject.com中找到了两个示例代码:

但是在他们两个中我都无法分辨拖动项目是什么,而且我也无法检索日期和时间字段。 有谁知道怎么可能这样做?

2 个答案:

答案 0 :(得分:1)

引用Microsoft.Office.Interop.Outlook.dll,这是一个非常简单直接的方法,没有第三方代码,可以从Outlook信息中获取已删除的项目:

Imports Microsoft.Office.Interop

.....

Private Sub MainForm_DragEnter(sender As Object, e As DragEventArgs) Handles Me.DragEnter, TextBox1.DragEnter
    DragStart = True
End Sub

Private Sub MainForm_DragOver(sender As Object, e As DragEventArgs) Handles Me.DragOver, TextBox1.DragOver
    If DragStart Then
        If e.Data.GetFormats.Contains("Csv") OrElse e.Data.GetFormats.Contains("CSV") Then
            e.Effect = DragDropEffects.Copy
        End If
    End If
    DragStart = False
End Sub

Private Sub GetFromOutlook()
    Dim myOlApp As New Outlook.Application
    Dim myExp As Outlook.Explorer = myOlApp.ActiveExplorer
    Dim myMailItem As Outlook.MailItem = DirectCast(myExp.Selection.Item(1), Outlook.MailItem)

    ' (with debug) you can check other properties
    'For Each ipp As Outlook.ItemProperty In myMailItem.ItemProperties
    '    Dim x1 = ipp.Name
    '    Dim x2 = ipp.Value
    'Next

    Const PR_TRANSPORT_MESSAGE_HEADERS = "http://schemas.microsoft.com/mapi/proptag/0x007D001F"
    Const PR_MAIL_HEADER_TAG = "http://schemas.microsoft.com/mapi/proptag/0x007D001E"
    Dim oPA As Outlook.PropertyAccessor = myMailItem.PropertyAccessor 'As Outlook.PropertyAccessor
    Dim Header As String = oPA.GetProperty(PR_MAIL_HEADER_TAG)
    Dim messageBody = myMailItem.Body
    myExp = Nothing
    myMailItem = Nothing
    myOlApp = Nothing

   '
   ' ......enter your code here
   '

End Sub

答案 1 :(得分:0)

您仍然可以使用OOM - 只需确保使用您决定支持的最低版Outlook的互操作。或者你可以使用后期绑定并通过反射来完成所有事情。

您还可以使用Redemption及其RDOSession.GetMessageFromMsgFile方法 - 它适用于所有版本的Outlook(97一直到2013年)。