VB.Net — Читать электронную почту, даже когда Outlook закрыт

#vb.net #outlook #visual-studio-2017

#vb.net #outlook #visual-studio-2017

Вопрос:

Теперь у меня есть приведенный ниже код, который выполняется даже при закрытии Outlook. Что мне нужно, так это иметь возможность запускать этот код каждый раз при получении нового электронного письма (с закрытым Outlook). Какие дополнения / изменения я бы внес? Есть пример кода? Спасибо

  Dim serverURI As New Uri("https://.....com/ews/exchange.asmx")
        Dim exch As New Microsoft.Exchange.WebServices.Data.ExchangeService()
        exch.Url = serverURI
        exch.UseDefaultCredentials = False
        exch.Credentials = New System.Net.NetworkCredential("username", 
                                                           "password", "domain")


        Dim iv As ItemView = New ItemView(999)
        iv.Traversal = ItemTraversal.Shallow
        Dim inboxItems As FindItemsResults(Of Item) = Nothing
        inboxItems = exch.FindItems(WellKnownFolderName.Inbox, iv)

        For Each i As Item In inboxItems
            MsgBox("this is" amp; i.Subject)
            Exit For
        Next
  

Комментарии:

1. Итак, вы рады переписать решение, которое не использует interop? Прямо сейчас ваше решение использует Outlook, поэтому оно не может работать без запущенного экземпляра Outlook

2. Я бы не возражал, если это не слишком сложно. На самом деле, теперь у меня есть приведенный ниже код, который выполняется даже при закрытии Outlook. Что мне нужно, так это иметь возможность запускать этот код каждый раз при получении нового электронного письма (с закрытым Outlook). Спасибо

3. Я добавил код в правке выше

4. Не похоже, что он поддерживает какую-либо систему событий / notofication / обмена сообщениями, которая будет испытывать что-то при поступлении почты?

5. предполагая, что данные получены из Office 365 Outlook … вы могли бы использовать push-уведомления от службы, а не от клиента — learn.microsoft.com/en-us/previous-versions/office/… … это серверная операция, а не выполняется в клиентском окне

Ответ №1:

Вы можете обратиться к следующему коду:

 Module Module1
Sub Main()
    Dim oApp As Outlook.Application = Nothing
    oApp = New Outlook.Application()
    Dim [nameSpace] As Outlook.[NameSpace] = oApp.GetNamespace("MAPI")
    Dim items As Outlook.Items = Nothing

    Try
        [nameSpace].Logon("", "", False, Missing.Value)
        Dim folder = [nameSpace].Folders("xxx@xx.com").Folders("Inbox")
        items = folder.Items
        AddHandler items.ItemAdd, AddressOf Items_ItemAdd
        Console.WriteLine("yes")
    Catch __unusedException1__ As Exception
        [nameSpace].Logon("", "", True, True)
    End Try
    Console.ReadKey()
End Sub

Private Sub Items_ItemAdd(ByVal Item As Object)
    Console.WriteLine("success")
    Dim myOlMItem As Outlook.MailItem
    myOlMItem = CType(Item, Outlook.MailItem)
    Console.WriteLine(myOlMItem.Subject)
End Sub
End Module
  

Комментарии:

1. Это для того, чтобы отправить мне электронное письмо или уведомить меня, когда новое электронное письмо поступает в папку «Входящие» Outlook, даже когда Outlook закрыт? Это то, что мне в основном нужно. Спасибо

2. Когда новое электронное письмо поступает во входящие Outlook, код распечатает тему нового электронного письма.

3. Да, вы могли бы попробовать это.