Я обновил ответ LB.Его DragEnter
EventHandler автоматически предполагал, что пользователь добавил что-то из Outlook.
В результате, если пользователь добавил что-то еще (файл, выделенный текст, ...), код все равно будет выглядетьна выбранные в настоящее время электронные письма в Outlook и игнорируйте то, что фактически было удалено.
Код:
Private _Outlook As Outlook.Application = Nothing
Private Sub Form_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
_Outlook = New Outlook.Application()
End Sub
Private Sub Form_DragEnter(ByVal sender As Object, ByVal e As DragEventArgs) Handles Me.DragEnter
Dim outlookRequiredFormats = New String() { _
"RenPrivateSourceFolder", _
"RenPrivateMessages", _
"RenPrivateItem", _
"FileGroupDescriptor", _
"FileGroupDescriptorW", _
"FileContents", _
"Object Descriptor"}
If outlookRequiredFormats.All(Function(requiredFormat) e.Data.GetDataPresent(requiredFormat)) Then
e.Effect = DragDropEffects.Copy
Else
e.Effect = DragDropEffects.None
End If
End Sub
Private Sub Form_DragDrop(ByVal sender As Object, ByVal e As DragEventArgs) Handles Me.DragDrop
Dim oExplorer As Outlook.Explorer = _Outlook.ActiveExplorer()
Dim oSelection As Outlook.Selection = oExplorer.Selection
Dim i As Integer = 0
For Each item As Object In oSelection
Dim mi As Outlook.MailItem = DirectCast(item, Outlook.MailItem)
mi.SaveAs("C:\YourPath\message" & i & ".msg")
i += 1
Next
Существует прямое приведение выбранного элемента Outlook к Outlook.MailItem
.Код, таким образом, работает только с реальными электронными письмами.Также возможно обрабатывать Outlook.MeetingItem
, Outlook.ContactItem
, Outlook.NoteItem
и, возможно, больше.