Как получить информацию о новом сообщении в моей дополнительной почтовой учетной записи? - PullRequest
1 голос
/ 04 февраля 2020

В Outlook есть несколько почтовых учетных записей.

Существует код, который генерирует окно сообщения со свойствами новой почты в основном почтовом ящике. Это работает для моей основной почтовой учетной записи.

Option Explicit
Private WithEvents inboxItems As Outlook.Items
Private Sub Application_Startup()
  Dim outlookApp As Outlook.Application
  Dim objectNS As Outlook.NameSpace

  Set outlookApp = Outlook.Application
  Set objectNS = outlookApp.GetNamespace("MAPI")


  Set inboxItems = objectNS.GetDefaultFolder(olFolderInbox).Items
End Sub
Private Sub inboxItems_ItemAdd(ByVal Item As Object)
On Error GoTo ErrorHandler
Dim Msg As Outlook.MailItem
Dim MessageInfo
Dim Result
If TypeName(Item) = "MailItem" Then
    MessageInfo = "" & _
        "Sender : " & Item.SenderEmailAddress & vbCrLf & _
        "Sent : " & Item.SentOn & vbCrLf & _
        "Received : " & Item.ReceivedTime & vbCrLf & _
        "Subject : " & Item.Subject & vbCrLf & _
        "Size : " & Item.Size & vbCrLf & _
        "Message Body : " & vbCrLf & Item.Body
    Result = MsgBox(MessageInfo, vbOKOnly, "New Message Received")
End If
ExitNewItem:
    Exit Sub
ErrorHandler:
    MsgBox Err.Number & " - " & Err.Description
    Resume ExitNewItem
End Sub

Вот как выглядит всплывающее сообщение: Here is what the pop-up message looks like

Существует еще один почтовый ящик "Оценка спецификации RU41" . Моя задача - получить то же всплывающее сообщение для новой входящей почты в этот почтовый ящик. Я заменил строку

Set inboxItems = objectNS.GetDefaultFolder(olFolderInbox).Items

на

Set inboxItems = objectNS.Folders("Specification Estimation RU41") _
                    .Folders("Inbox").Items

, чтобы весь код выглядел так:

Option Explicit
Private WithEvents inboxItems As Outlook.Items
Private Sub Application_Startup()
  Dim outlookApp As Outlook.Application
  Dim objectNS As Outlook.NameSpace

  Set outlookApp = Outlook.Application
  Set objectNS = outlookApp.GetNamespace("MAPI")
 Set inboxItems = objectNS.Folders("Specification Estimation RU41") _
                    .Folders("Inbox").Items


End Sub
Private Sub inboxItems_ItemAdd(ByVal Item As Object)
On Error GoTo ErrorHandler
Dim Msg As Outlook.MailItem
Dim MessageInfo
Dim Result
If TypeName(Item) = "MailItem" Then
    MessageInfo = "" & _
        "Sender : " & Item.SenderEmailAddress & vbCrLf & _
        "Sent : " & Item.SentOn & vbCrLf & _
        "Received : " & Item.ReceivedTime & vbCrLf & _
        "Subject : " & Item.Subject & vbCrLf & _
        "Size : " & Item.Size & vbCrLf & _
        "Message Body : " & vbCrLf & Item.Body
    Result = MsgBox(MessageInfo, vbOKOnly, "New Message Received")
End If
ExitNewItem:
    Exit Sub
ErrorHandler:
    MsgBox Err.Number & " - " & Err.Description
    Resume ExitNewItem
End Sub

Но это не работает. Нет сообщений об ошибках, но нет реакции на новые письма.

Как я могу заставить его работать?

1 Ответ

3 голосов
/ 05 февраля 2020

Вы пытались работать с методом NameSpace.GetSharedDefaultFolder (Outlook) MSDN

Этот метод используется в сценарии делегирования, где один пользователь делегировал доступ другому пользователю для одной или нескольких папок по умолчанию

Пример

Private WithEvents RU41_Items As Outlook.Items

Private Sub Application_Startup()
    Dim olNs As Outlook.NameSpace
    Set olNs = Application.GetNamespace("MAPI")

    Dim RU41_Recip As Outlook.Recipient
    Set RU41_Recip = olNs.CreateRecipient("0m3r@email.com")

    Dim RU41_Inbox As Outlook.MAPIFolder
    Set RU41_Inbox = olNs.GetSharedDefaultFolder(RU41_Recip, olFolderInbox)

    Set RU41_Items = RU41_Inbox.Items

End Sub

Private Sub RU41_Items_ItemAdd(ByVal Item As Object)
    If TypeOf Item Is Outlook.MailItem Then
        DoEvents
        '''code here
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...