Получить папку «Входящие», связанную с почтовым ящиком, который не является основным почтовым ящиком - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь получить почтовый ящик определенного c адреса электронной почты, где к одному Outlook подключено несколько адресов. Я могу добиться успеха только в том случае, если я проверю основной почтовый ящик (первый из перечисленных в Outlook).

dim outlApp as Object   
dim outlNsp as Object
dim outlMapp as Object
dim outlsubMapp as Object
dim Mappar as Object

outlApp = CreateObject("Outlook.Application")
outlNsp = outlApp.GetNamespace("MAPI")

outlMapp = outlNsp.Folders.item(Mail_username)

Mappar = outlMapp.Folders
outlsubMapp = Mappar.item(6) 
'6 is olFolderInbox enum value

outlsubMapp = outlNsp.GetDefaultFolder(6)
'6 is olFolderInbox enum value

Inbox = outlsubMapp.Name

Если я изменю Mail_username, я все равно получу первую папку входящих сообщений электронной почты.

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Вы можете использовать метод Store.GetDefaultFolder , который возвращает объект Folder, представляющий папку по умолчанию в хранилище и имеющий тип, указанный аргументом FolderType. Этот метод аналогичен методу GetDefaultFolder объекта NameSpace. Разница в том, что этот метод получает папку по умолчанию в хранилище доставки, связанную с учетной записью, тогда как NameSpace.GetDefaultFolder возвращает папку по умолчанию в хранилище по умолчанию для текущего профиля.

Чтобы получить все хранилища в профиль, вам необходимо использовать свойство Stores класса Namespace:

Sub EnumerateFoldersInStores()  
 Dim colStores As Outlook.Stores  
 Dim oStore As Outlook.Store  
 Dim oRoot As Outlook.Folder 


 On Error Resume Next  
 Set colStores = Application.Session.Stores  
 For Each oStore In colStores  
   Set oRoot = oStore.GetRootFolder  
   Debug.Print (oRoot.FolderPath)  
   EnumerateFolders oRoot  
 Next  
End Sub 

Private Sub EnumerateFolders(ByVal oFolder As Outlook.Folder)  
 Dim folders As Outlook.folders  
 Dim Folder As Outlook.Folder  
 Dim foldercount As Integer 

 On Error Resume Next  
 Set folders = oFolder.folders  
 foldercount = folders.Count  
 'Check if there are any folders below oFolder  
 If foldercount Then   
   For Each Folder In folders  
     Debug.Print (Folder.FolderPath)  
     EnumerateFolders Folder  
   Next  
 End If  
End Sub
0 голосов
/ 08 мая 2020

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

Я не уверен, что это полный ответ, но он поможет вам начать работу. Попробуйте использовать макрос, а затем возвращайтесь с любыми вопросами.

Sub ListStoresAndTopLevelFolders()

  Dim FldrCrnt As Folder
  Dim InxFldrChild As Long
  Dim InxStoreCrnt As Long
  Dim StoreCrnt As Folder

  With Application.Session
    For InxStoreCrnt = 1 To .Folders.Count
      Set StoreCrnt = .Folders(InxStoreCrnt)
      With StoreCrnt
        Debug.Print .Name
        For InxFldrChild = .Folders.Count To 1 Step -1
          Set FldrCrnt = .Folders(InxFldrChild)
          With FldrCrnt
            Debug.Print "   " & .Name
          End With
        Next
      End With
    Next
  End With

End Sub
...