Outlook VBA: возможно ли найти все неотвеченные электронные письма, отправленные с клиента? - PullRequest
0 голосов
/ 25 марта 2020

Я новичок в VBA, поэтому со мной все в порядке. Нужен способ следить за всеми письмами, отправленными от меня другим пользователям, но там, где другой пользователь никогда не отвечал. Это могут быть новые электронные письма или не отвеченные в текущих разговорах. Мне нужен способ получить последнее электронное письмо от me в разговоре или новом письме. Можно ли это сделать?

Я использую Microsoft Office 356 ProPlus версии 1908 (сборка 11929.20606)

Мой сценарий VBA успешно находит электронные письма в моем почтовом ящике ('\ firstname. lastname@domain.com \ Inbox') и перемещает их в подпапку «без ответа», но проблема в том, что все электронные письма в основном принадлежат другим пользователи. И когда я фильтрую электронные письма от себя (используя фильтр по умолчанию в папке, например, от: «отправитель»), все, что я получаю, - это отправленные мне письма или автоматически сгенерированные письма с сервера SharePoint от моего имени (например, сайты общего ресурса с другие пользователи). Я также пытался выполнить поиск только в моей отправленной папке ('\ firstname. lastname@domain.com \ Sent'), и в этом списке перечислены те же элементы, что и при фильтрации почтовых сообщений, отправленных мне с помощью фильтра папок по умолчанию, которые были получены при запросе моей папки «Входящие». .

Чтобы решить, какие письма помещать в мою папку «без ответа», я попытался (безуспешно) выполнить следующее:

1) «Поиск DASL», исключив все письма с последним исполняемый глагол установлен на «ответил всем» или «ответил».

NOT ("http://schemas.microsoft.com/mapi/proptag/0x10810003" = 102 OR "http://schemas.microsoft.com/mapi/proptag/0x10810003" = 103)

2) Используя ConversationIndex, как я обнаружил в Интернете, неотвеченные письма имеют длину ConversationIndex = 44:

If Len(objVariant.ConversationIndex) = 44 Then

3) Использование LastExecutedVerb. Заметив, проверив свойства электронного письма в разговоре, в письмах, отправленных мной как последним элементом, всегда указывалось «PR_LAST_VERB_EXECUTED 0» при использовании:

Debug.Print "PR_LAST_VERB_EXECUTED", propertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x10810003")

Поэтому я попытался отфильтровать электронные письма, где PR_LAST_VERB_EXECUTED = 0, но это привело к тому, что электронные письма вообще не были найдены.

Ответы [ 2 ]

0 голосов
/ 27 марта 2020

У меня нет подходящих разговоров и я не использую SharePoint, поэтому не могу исследовать вашу проблему. Это не ответ, вместо этого я объясняю, как я буду исследовать ваши требования и разработать решение.

Outlook VBA имеет несколько мощных фильтров, но мне редко удавалось адаптировать их к моим требованиям. Когда у меня возникло такое же требование, как у вас, не было выбрано ни одной группы писем. Вместо этого я go через свои электронные письма отбрасываю письма с характеристиками c A или без характеристики c B, а затем работаю с оставшимися. Итак, мой код будет выглядеть примерно так:

Dim Review As Boolean

For Inx = FldrSrc.Items.Count To 1 Step -1

  ItemCrnt = FldrSrc.Items(Inx)
  Review = True

  If ItemCrnt has CharacteristicA Then
    Review = False
  End If
  If Review Then
    If ItemCrnt does not have CharacteristicB Then
      Review = False
    End If
  End If
  If Review Then
    If ItemCrnt has CharacteristicC Then
      Review = False
    End If
  End If

  If Review Then
    ItemCrnt.Move FldrDest
  End If

Next

В приведенном выше коде я получил доступ к FldrSrc.Items. Вместо этого вы можете получить доступ к отфильтрованной коллекции предметов.

Вы заметите, что мой For-Loop ведет обратный отсчет. Это важно. FldrSrc.Items - это коллекция, в которой каждый элемент идентифицируется по его позиции. Рассмотрим:

┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
│ Item 1 │ Item  2│ Item 3 │ Item 4 │ Item 5 │ Item 6 │ Item 7 │ Item 8 │ Item 9 │
└────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘

Предположим, я удаляю элемент 5. Элемент 6 становится элементом 5, элемент 7 становится элементом 6 и т. Д .:

┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
│ Item 1 │ Item  2│ Item 3 │ Item 4 │ Item 5 │ Item 6 │Item  7 │Item  8 │
│        │        │        │        │  was 6 │  was 7 │  was 8 │  was 9 │
└────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘

Если я рассчитываю вперед, после удаления элемента 5, я рассматриваю пункт 6. Но пункт 6 - это старый пункт 7; Я никогда не проверяю старый пункт 6.

Но если я считаю в обратном порядке, после удаления пункта 5 я проверяю пункт 4, который не сдвинулся.

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

Затем вам нужно рассмотреть тело l oop. Для каждого типа электронной почты вам необходимо указать некоторые характеристики c или характеристики, которыми должны или не должны обладать электронные письма этого типа. Я верю, что моя диагностика c рутина поможет с этой задачей. Посетите { ссылка } и скопируйте код в модуль. Возле вершины вы найдете: #Const Selected = True. Это должно быть заменено на #Const Selected = False. Вам также потребуются ссылки на следующие библиотеки: «Среда выполнения сценариев Microsoft» и «Объекты данных Microsoft ActiveX nn Library».

Сделав это, выберите одно или несколько писем, которые вы отправляете , а не , которые хотите скопировать в папку без ответа. Затем запустите макрос InvestigateEmails(). Макрос создаст файл на вашем рабочем столе с именем «InvestigateEmails.txt». Этот файл будет содержать список значений каждого свойства выбранных писем, которые я считаю полезными. Просмотрите нежелательные электронные письма и определите свойства, которые делают их особенными.

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

0 голосов
/ 25 марта 2020

PR_LAST_VERB_EXECUTED проверка должна быть для отсутствующего свойства (= ноль)

@SQL="http://schemas.microsoft.com/mapi/proptag/0x10810003" is null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...