Как получить почту только от определенного человека через Outlook, используя VB.Net? - PullRequest
0 голосов
/ 16 марта 2011

Я получил следующий код от codeproject.com :

    Dim objOL As Outlook.Application
    Dim objNS As Outlook.NameSpace
    Dim objFolder As Outlook.Folders
    Dim Item As New Object
    Dim myItems As Outlook.Items
    Dim x As Int16

    objOL = New Outlook.Application()
    objNS = objOL.GetNamespace("MAPI")

    Dim olfolder As Outlook.MAPIFolder
    olfolder = objOL.GetNamespace("MAPI").PickFolder
    myItems = olfolder.Items

    Dim i As Integer
    For x = 1 To myItems.Count
        MessageBox.Show(myItems.Item(x).SenderName)
        MessageBox.Show(myItems.Item(x).SenderEmailAddress)
        MessageBox.Show(myItems.Item(x).Subject)
        MessageBox.Show(myItems.Item(x).Body)
        MessageBox.Show(myItems.Item(x).to)
        MessageBox.Show(myItems.Item(x).ReceivedByName)
        MessageBox.Show(myItems.Item(x).ReceivedOnBehalfOfName)
        MessageBox.Show(myItems.Item(x).ReplyRecipientNames)
        MessageBox.Show(myItems.Item(x).SentOnBehalfOfName)
        MessageBox.Show(myItems.Item(x).CC)
        MessageBox.Show(myItems.Item(x).ReceivedTime)
    Next x
    Dim Atmt As Outlook.Attachment

    For Each Atmt In Item.Attachment
        Dim filename As String = "C:\Email Attachments\" + Atmt.FileName
        Atmt.SaveAsFile(filename)
    Next Atmt

Теперь я дошел до того, что сделал папку по умолчанию папкой «Входящие».То, что я хотел бы сделать, - это расширить функциональность, извлекая электронные письма только конкретного человека, а также извлекая и сохраняя любые вложения, которые он / она отправляет.Кроме того, я получаю следующую ошибку, когда код достигает части
Dim Atmt as Outlook.Attachment: Открытый элемент «Вложение» для типа «Объект» не найден. Мне нужна эта функция для извлечения вложений.Я пробовал разные вещи, но ничего не получалось.Можете ли вы помочь мне?

Ответы [ 2 ]

1 голос
/ 16 марта 2011

В примере кода codeproject, который вы просматриваете, бит вложения должен находиться внутри цикла, поэтому:

For x = 1 As Integer To myItems.Count
    For Each Atmt As Outlook.Attachment In myItems(x).Attachment
        Dim filename As String = "C:\Email Attachments\" + Atmt.FileName
        Atmt.SaveAsFile(filename)
    Next Atmt
Next
1 голос
/ 16 марта 2011

Обновление 2

Dim items As New Dictionary (из строки, строки) Для х = 1 к myItems.Count Почта от конкретного человека Если myItems.Item (x) .SenderEmailAddress = "somebody@mail.com", то Для каждого атрибута как Outlook. Приложение в myItems (x). Приложение

            'A specific type of file
            If Atmt.FileName.Contains("hello") Then items("hello") = Atmt.FileName
            If Atmt.FileName.Contains("hello1") Then items("hello1") = Atmt.FileName
            If Atmt.FileName.Contains("hello2") Then items("hello2") = Atmt.FileName

            Dim filename As String = "C:\Email Attachments\" + Atmt.FileName
            Atmt.SaveAsFile(filename)

        Next Atmt
    End If
Next
For Each item As KeyValuePair(Of String, String) In items
    Console.WriteLine(item.Key & ":" & item.Value)
Next

Попробуйте этот код

Outlook.Attachment oAttach = myItems.Attachments[0];

В VB.Net это будет похоже на

Dim oAttach as outlook.Attachment = myItems.Attachments(0);

Надеюсь, это поможет

...