我想添加一些功能,使用户能够将项目从outllok拖放到Windows窗体应用程序,而不使用Microsoft.Office.Interop.Outlook参考,这样我就可以支持所有版本的outlook。 我需要检测项目是否是:电子邮件,会议或任务,我还需要能够从项目中提取所有字段。 我在CodeProject.com中找到了两个示例代码:
但是在他们两个中我都无法分辨拖动项目是什么,而且我也无法检索日期和时间字段。 有谁知道怎么可能这样做?
答案 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年)。