Используйте метод Restrict, чтобы получить получателя, тему и диапазон дат

Я старался

'only works for name, not email address.
"@SQL=""urn:schemas:httpmail:displayto"" ci_phrasematch '%John Doe%'" 

'works great, failed when use AND. today was declared as string
"@SQL=""urn:schemas:httpmail:subject"" like '%" & emailSubject & "%'"

'works great, failed when use AND. today was declared as string
"[ReceivedTime] <= today" 

Как я могу использовать Item.Restrict для одновременной фильтрации адреса электронной почты получателя, темы и диапазона дат?


person aaa    schedule 17.01.2018    source источник
comment
stackoverflow.com/help/mcve   -  person niton    schedule 17.01.2018
comment
stackoverflow.com/search?q=user:4539709+[outlook-filter]   -  person 0m3r    schedule 18.01.2018
comment
Спасибо за ссылку.   -  person aaa    schedule 18.01.2018


Ответы (2)


Вот пример для нескольких фильтров

Option Explicit
Public Sub Example()
    Dim olNs As Outlook.NameSpace
    Dim TargetFolder As Outlook.MAPIFolder
    Dim Items As Outlook.Items
    Dim Item As Object
    Dim i As Long
    Dim Filter As String

    Set olNs = Application.Session
    If TargetFolder Is Nothing Then Set TargetFolder = ActiveExplorer.CurrentFolder
    Debug.Print TargetFolder.Name

    Filter = "@SQL=" & Chr(34) & "urn:schemas:httpmail:datereceived" & _
                       Chr(34) & " >= '01/10/2018' And " & _
                       Chr(34) & "urn:schemas:httpmail:datereceived" & _
                       Chr(34) & " < '01/16/2018' And " & _
                       Chr(34) & "urn:schemas:httpmail:fromname" & _
                       Chr(34) & "Like '%0m3r 0m3r%'"

    Set Items = TargetFolder.Items.Restrict(Filter)
        Items.Sort "[ReceivedTime]"

    For i = Items.Count To 1 Step -1
        DoEvents
        If TypeOf Items(i) Is mailitem Then
            Set Item = Items(i)
            Debug.Print Item.Subject
            Debug.Print Item.ReceivedTime
        End If
    Next

End Sub

If TargetFolder Is Nothing Then Set TargetFolder = ActiveExplorer.CurrentFolder

Возвращает или задает объект MAPIFolder, представляющий текущая папка отображается в проводнике


Или используйте

Dim olNs As Outlook.NameSpace
Dim TargetFolder As Outlook.MAPIFolder
Set olNs = Application.GetNamespace("MAPI")
Set TargetFolder = olNs.GetDefaultFolder(olFolderInbox)

Фильтр по строке темы

Filter = "@SQL=" & Chr(34) & "urn:schemas:httpmail:datereceived" & _
                   Chr(34) & " >= '01/10/2018' And " & _
                   Chr(34) & "urn:schemas:httpmail:datereceived" & _
                   Chr(34) & " < '01/17/2018' And " & _
                   Chr(34) & "urn:schemas:httpmail:fromname" & _
                   Chr(34) & "Like '%0m3r 0m3r%' And " & _
                   Chr(34) & "urn:schemas:httpmail:subject" & _
                   Chr(34) & " Like '%Bla Bla%'"
person 0m3r    schedule 17.01.2018
comment
Привет, почему он возвращает Inbox? разве он не должен также распечатать Subject и ReceivedTime? Я изменяю "Like '%0m3r 0m3r%'" на свое имя. Я отправил себе письмо вчера. Items.Count было 0. - person aaa; 18.01.2018
comment
@ppz fromname должно быть именем отправителя - TargetFolder вернет текущую активную папку, папку, которую вы просматриваете - - person 0m3r; 18.01.2018
comment
Да. Я тоже тестировал с помощью Subject. Он распечатывает данные релевантности. Однако, как только я включу фильтры Date. Он возвращает пустой результат. Я проверяю формат даты - person aaa; 18.01.2018
comment
Хорошо, получай. Это потому, что мой системный формат даты не в формате mm/dd/yyyy. Я изменяю формат даты, и он отлично работает. Спасибо! - person aaa; 18.01.2018

Outlook не знает, что такое «сегодня». Вам необходимо указать правильно отформатированное значение даты, например. "2018-01-17"

person Dmitry Streblechenko    schedule 17.01.2018