Как выбрать IMAP акк в Outlook VBA - PullRequest
0 голосов
/ 10 января 2019

У меня проблема, макрос ниже проверяет, есть ли заголовок письма от отправителя. Проблема в том, что в outlook у меня 2 аккаунта: IMAP и Exchange. Макро всегда выбирает обмен. Где причина?

 Sub srchmail()

Dim Itms As Items
Dim srchSender As String
Dim srchSubject As String
Dim strFilterBuild As String
Dim ItmsBuild As Items
Dim strFilter As String

Set olApp = Outlook.Application
Set objNS = olApp.GetNamespace("MAPI")


Set sub_olFolder = objNS.GetDefaultFolder(olFolderInbox)
Set sub_olFolder = sub_olFolder.Folders("SUBFOLDER")
Set Itms = sub_olFolder.Items

Dim i As Long
For i = 1 To Itms.Count
Next


srchSender = "SENDERMAIL"
srchSubject = "SUBJECTMAIL"


strFilter = "[SenderName] = '" & srchSender & "' And [Subject] = '" & srchSubject & "' And [SentOn] > '" & Format(Date, "dd-mm-yyyy") & "'"


Set Itms = Itms.Restrict(strFilter)
If Itms.Count = 0 Then


    MsgBox "dont mail in " & sub_olFolder & " with sub:'" & srchSubject & "' on " & Format(Date, "dd-mm-yyyy")
    Else


    MsgBox "found mail in " & sub_olFolder & " with sub: '" & srchSubject & "' on  " & Format(Date, "dd-mm-yyyy")
End If
ExitRoutine:
    Set Itms = Nothing
End Sub

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Ваша проблема:

Set sub_olFolder = objNS.GetDefaultFolder(olFolderInbox)

У вас может быть только один почтовый ящик по умолчанию. Ваш почтовый ящик по умолчанию явно находится в учетной записи Exchange. Вам нужно будет явно указать имя хранилища IMAP для доступа к папке «Входящие».

Когда вы посмотрите на панель папок, вы увидите что-то вроде этого:

Xxxxxxxxxxx
    Drafts
    Deleted Items
    Inbox
            :    :
Yyyyyyyyy
    Drafts
    Deleted Items
    Inbox
       SUBFOLDER
            :    :

Xxxxxxxxxxx и Yyyyyyyyy - названия магазинов. Магазины - это файлы, в которых Outlook сохраняет все ваши электронные письма, элементы календаря, задачи и так далее. Насколько я понимаю, вы ДОЛЖНЫ иметь один магазин на одну учетную запись. Вы также можете иметь столько дополнительных магазинов, сколько пожелаете. У меня есть магазины, названные для моих двух учетных записей: «Архив», «Тест» и многие другие.

Попробуйте:

Set sub_olFolder = objNS.Folders("Yyyyyyyyy").Folders("Inbox")

Где «Yyyyyyyyy» - это название магазина (как оно отображается на панели папок), содержащего подпапку, к которой вы хотите получить доступ.

Возможно, мне следует добавить, что я написал бы:

Set Itms = Session.Folders("Yyyyyyyyy").Folders("Inbox").Folders("SUBFOLDER").Items

«Session» и «NameSpace» должны быть идентичными. Я использую сеанс, потому что он избавляет от необходимости создавать пространство имен, и потому что давным-давно у меня произошел сбой в NameSpace, который я не смог диагностировать.

Если вам не нужен доступ к хранилищу, папке «Входящие» или SUBFOLDER каким-либо другим способом, вам не нужны переменные для них. Начиная с конечного родителя (сеанса), вы можете связать имена детей, внуков и т. Д. На любую глубину.

Будьте осторожны, связывая свойства вместе, как это. (1) Чтобы получить правильную строку, может потребоваться некоторое время. (2) Я видел пример строк свойств, где действительно трудно определить, к чему к нему обращаются. Если вы вернетесь к этому макросу через 12 месяцев, помните ли вы, что означает эта строка? Если кто-то еще должен поддерживать ваш макрос, поймет ли он, что вы сделали? Если сомневаетесь, сделайте это просто.

Добавлено из-за ошибки в исходном ответе

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

Замените «Yyyyyyyyy» на имя вашего магазина IMAP, а затем введите его в своем «Немедленном окне».

? Session.Folders("Yyyyyyyyy").Name

Переводчик должен ответить именем магазина IMAP. Если это работает, попробуйте:

? Session.Folders("Yyyyyyyyy").Folders("Inbox").Name

Переводчик должен ответить Входящие. Если это работает, попробуйте:

? Session.Folders("Yyyyyyyyy").Folders("Inbox").Folders("SUBFOLDER").Name

Переводчик должен ответить ПОДДЕЛКУ. Если это работает, попробуйте:

? Session.Folders("Yyyyyyyyy").Folders("Inbox").Folders("SUBFOLDER").Items(1).ReceivedTime

Переводчик должен ответить с датой и временем предыдущего письма в подпапке. Если это работает, мой ответ должен работать. Если что-либо из перечисленного не работает, пожалуйста, ответьте с подробным объяснением того, что не удалось

0 голосов
/ 10 января 2019

Похоже, ваша учетная запись Exchange установлена ​​по умолчанию, поэтому когда вы получаете sub_olFolder, вы работаете с подпапкой папки «Входящие» хранилища сообщений, связанной с учетной записью Exchange.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...