Я довольно плохо знаком с MAPI и не написал много кода на C ++.
По сути, я хочу прочитать все электронные письма в папке «Входящие» и отфильтровать их по тексту. До сих пор я использую исходный код, предоставленный на веб-сайт Microsoft MSDN который в основном читает все электронные письма из входящих сообщений. Теперь я хочу не получать все электронные письма, а фильтровать их по теме, скажем: я хочу, чтобы все электронные письма были в моей папке входящих с заголовком темы «test».
До сих пор я выяснил, что следующая строка кода извлекает все письма:
hRes = HrQueryAllRows(lpContentsTable, (LPSPropTagArray) &sptCols, &sres, NULL, 0, &pRows);
Параметр &sres
от типа SRestriction
,
Я пытался реализовать фильтр на «тест» в теме:
sres.rt = RES_CONTENT;
sres.res.resContent.ulFuzzyLevel = FL_FULLSTRING;
sres.res.resContent.ulPropTag = PR_SUBJECT;
sres.res.resContent.lpProp = &SvcProps;
SvcProps.ulPropTag = PR_SUBJECT;
SvcProps.Value.lpszA = "test";
ScvProps
от типа SPropValue
,
Если я выполню приложение, то получу 0 строк. Если я изменю тест строки на пустую строку, я получу все письма.
Я предполагаю, что я использую опцию «фильтр» неправильно, какие-нибудь идеи?
Редактировать: Когда я изменяю FuzzyLevel на:
sres.res.resContent.ulFuzzyLevel = FL_SUBSTRING;
тогда я могу искать предметы, которые содержат один символ, но как только я добавляю второй символ, я получаю 0 строк в результате. Я почти уверен, что это всего лишь некоторые вещи с ++, которые я не понимаю, которые вызывают все эти проблемы …
Я понял проблему.
Замена
sres.res.resContent.ulFuzzyLevel = FL_FULLSTRING;
sres.res.resContent.ulPropTag = PR_SUBJECT;
SvcProps.ulPropTag = PR_SUBJECT;
с
sres.res.resContent.ulFuzzyLevel = FL_SUBSTRING;
sres.res.resContent.ulPropTag = PR_SUBJECT_A;
SvcProps.ulPropTag = PR_SUBJECT_A;
исправил проблему.
Других решений пока нет …