#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. Да, вы могли бы попробовать это.