Найти электронную почту Outlook с помощью идентификатора электронной почты или расширенного свойства с помощью VBA

С помощью API MS Graph я могу видеть идентификатор электронной почты Outlook и устанавливать пользовательские свойства (расширенное свойство с одним значением — https://learn.microsoft.com/en-us/graph/api/singlevaluelegacyextendedproperty-post-singlevalueextendedproperties?view =graph-rest-1.0).

Есть ли способ найти конкретное электронное письмо, выполнив поиск по этому EmailID или пользовательскому свойству с помощью VBA? Не похоже, что я могу искать эти свойства с помощью «Folder.Items.Restrict()»

Кроме того, как только я получаю элемент электронной почты, я могу увидеть пользовательское свойство, которое я установил через MS Graph Api.

OItem.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/string/{10101010-1010-1010-C101-1010101010101010}/myCustomProp")

Но есть ли способ запросить папку «Входящие» и найти это конкретное письмо с помощью VBA?

Я пробовал использовать Restrict() и PropertyAccessor, но они, похоже, не решают мою проблему.

Калькулятор CGPA 12 для семестра
Калькулятор CGPA 12 для семестра
Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие...
Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
Запуск PHP на IIS без использования программы установки веб-платформы
Запуск PHP на IIS без использования программы установки веб-платформы
Установщик веб-платформы, предлагаемый компанией Microsoft, перестанет работать 31 декабря 2022 года. Его закрытие привело к тому, что мы не можем...
Оптимизация React Context шаг за шагом в 4 примерах
Оптимизация React Context шаг за шагом в 4 примерах
При использовании компонентов React в сочетании с Context вы можете оптимизировать рендеринг, обернув ваш компонент React в React.memo сразу после...
Библиотека для работы с мороженым
Библиотека для работы с мороженым
Лично я попрощался с операторами print() в python. Без шуток.
Настройка шаблона Metronic с помощью Webpack и Gulp
Настройка шаблона Metronic с помощью Webpack и Gulp
Я пишу эту статью, чтобы поделиться тем, как настроить макет Metronic с помощью Sass, поскольку Metronic предоставляет так много документации, и они...
0
0
56
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать Items.Find/Restrict для поиска свойства по его имени DASL. Используйте запрос, например

@SQL = "http://schemas.microsoft.com/mapi/string/{10101010-1010-1010-C101-1010101010101010}/myCustomProp" = 'some value'

Обратите внимание, что имя DASL должно быть заключено в кавычки, поэтому в VBA оно будет

set item = SomeFolder.Items.Find("@SQL = ""http://schemas.microsoft.com/mapi/string/{10101010-1010-1010-C101-1010101010101010}/myCustomProp"" = 'some value'")

Привет! Спасибо за ответ! По какой-то причине «SomeFolder.Items.Find» возвращается как ничего/нуль.

byen 12.01.2023 02:08
SomeFolder означает экземпляр объекта MAPIFolder. Вам нужно будет использовать соответствующее имя переменной.
Dmitry Streblechenko 12.01.2023 02:41

byen 12.01.2023 20:50

Это выглядит хорошо для меня. Возвращает ошибку?

Dmitry Streblechenko 12.01.2023 21:40

Спасибо за подтверждение правильности синтаксиса. Должно быть что-то еще, что вызывает сбой поиска. «Найти» не дает ошибки, он просто ничего не возвращает. oMail Ничего = Истина. Имя и значение свойства верны, поскольку я могу прочитать значение свойства с помощью «GetProperty».

byen 13.01.2023 00:08

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

Dmitry Streblechenko 13.01.2023 00:22

При проверке в Outlook Spy в конец строки DASL для пользовательского свойства был добавлен 0x0000001F. Таким образом, поиск работает, когда я включил это. Выглядит так @SQL = "http://schemas.microsoft.com/mapi/string/{10101010-101‌​0-1010-C101-10101010‌​10101010}/myCustomPr‌​op/0x0000001F" = 'some value'. У вас есть идея, почему 0x0000001F нужно включить? В любом случае большое спасибо за помощь и предложения!!

byen 16.01.2023 21:39
0x001F — это тип свойства, который означает PT_UNICODE. Обычно Outlook не требует типа свойства для строковых свойств — он предполагает строку, если тип не указан.
Dmitry Streblechenko 16.01.2023 22:49

Двоичные свойства (такие как EntryID и т. д.) не поддерживаются для поиска элементов в Outlook. Лучшее, что вы можете сделать, это искать элементы с пользовательским свойством. Например, вы можете использовать следующий фильтр для поиска пользовательского свойства под названием «Подарок мамы», которое содержит слово pearls:

filter = "@SQL = " & Chr(34) & _
    "https://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/" _
    & "Mom%27s%20%22Gift%22" & Chr(34) & " like '%pearls%'"

Обратите внимание, что мы использовали функцию Chr(34) для решения проблемы с двойными кавычками. Подробнее о сравнении строк читайте в статье Фильтрация элементов с помощью сравнения строк.

Для поиска элементов, соответствующих вашим условиям, в папке Outlook вы можете использовать методы Find/FindNext или Restrict класса Items. Подробнее о них можно прочитать в статьях, которые я написал для технического блога:

Но если вам нужно искать элементы в нескольких папках или подпапках, вы можете вместо этого использовать метод AdvancedSearch класса Application. Ключевые преимущества использования метода AdvancedSearch в Outlook:

  • Поиск выполняется в другом потоке. Вам не нужно запускать другой поток вручную, так как метод AdvancedSearch запускает его автоматически в фоновом режиме.
  • Возможность поиска любых типов элементов: почта, встреча, календарь, заметки и т. д. в любом месте, т.е. за рамками определенной папки. Методы Restrict и Find/FindNext можно применять к конкретной коллекции Items (см. свойство Items класса Folder в Outlook).
  • Полная поддержка запросов DASL (для поиска также можно использовать пользовательские свойства). Чтобы повысить эффективность поиска, можно использовать ключевые слова мгновенного поиска, если для магазина включен мгновенный поиск (см. свойство IsInstantSearchEnabled класса Store).
  • Вы можете остановить процесс поиска в любой момент с помощью метода Stop класса Search.

См. Расширенный поиск в Outlook программно: C#, VB.NET для получения дополнительной информации.

Другие вопросы по теме

Как вставить определенное значение ячейки из листа Excel в строку темы Outlook с помощью макроса?
CSS из моих шаблонов электронной почты не работает в электронной почте Yahoo
Из кадра данных в тело электронной почты автоматически, несколько проблем с форматированием: разделитель тысяч, цвет (красный для отрицательного числа и зеленый для положительного)
Повторная обработка недоставленной почты Outlook
Как прикрепить несколько файлов к почте Laravel 8 из laravel Excel 3.1
Хотите отправить электронное письмо Outlook из Python с помощью win32com.client с другого адреса электронной почты, который используется по умолчанию.
Как запустить скрипт Python при отправке электронной почты Outlook?
C# Для SMTP-сервера требуется безопасное соединение, иначе клиент не прошел проверку подлинности. Ответ сервера был: 5.7.0 Требуется аутентификация
Шаблон электронной почты WooCommerce не отображается при отправке пользовательских электронных писем из functions.php
Извлеките данные из таблицы по электронной почте и отправьте их в тикет jira с помощью приложения логики.