#c #outlook #exchangewebservices #mapi
#c #outlook #exchangewebservices #mapi
Вопрос:
Я пытаюсь проанализировать электронное письмо с помощью расширенного MAPI.
Чтобы получить указатель потока, я использую LPMAPIPROP::OpenProperty()
с PR_BODY
тегом для возврата a IStream*
, и я использую IStream::Read()
метод для чтения данных в буфер.
По какой-то причине, когда я открываю электронное письмо с помощью MFCMAPI, с телом все в порядке. Например, "ABC"
. Но, когда я пытаюсь программно прочитать в буфер, я получаю символы пробела после каждого символа, например "A B C"
.
Ответ №1:
Это пробел ( 0x20
) или нет 0x00
? Если вы открываете PR_BODY_W
(в отличие от PR_BODY_A
), вы получите строку Unicode (два байта на символ), а не однобайтовую строку.
Комментарии:
1. Нет, это пробел 0x20, а не нулевой ограничитель 0x0. Я открываю
PR_BODY_W
вместо 0x65 0x00 0x66 0x00 значение 0x65 0x00 0x20 0x00 0x66 0x00…2. Это то, что вы видите в MFCMAPI или OutlookSpy (нажмите iMessage, выберите свойство PR_BODY, нажмите «…» рядом с полем редактирования «Значение»)?
3. Вы также можете попробовать открыть PR_BODY_W в OutlookSpy — щелкните правой кнопкой мыши на свойстве, выберите IMAPIProp::OpernProperty, выберите IID_IStream.
4. Я тоже пробовал с OutlookSpy, к сожалению, результат тот же.
5. Тогда вы ничего не видите — у вас действительно есть лишние пробелы. Вы видите то же самое в
PR_RTF_COMPRESSED
(это то, что на самом деле отображает Outlook)?
Ответ №2:
По какой-то причине файл PR_RTF_COMPRESSED
был поврежден, и вместо отображения RTF он просто показывал PR_BODY
с пробелами между каждым символом. Я думаю, это было вызвано тем, что я пытался вручную установить PR_RTF_COMPRESSED
вместо того, чтобы позволить Outlook установить его для меня.
Комментарии:
1. Вам нужно только установить
PR_RTF_COMPRESSED
(или вызватьRtfSync
), если хранилище изначально не поддерживает RTF (STORE_RTF_OK
бит вPR_STORE_SUPPORT_MASK)