У меня есть файл .MSG, для которого я не могу изменить PR_BLOCK_STATUS (PidTagBlockStatus). Если я изменю его с помощью OutlookSpy или MFCMapi, я получаю MAPI_E_COMPUTED.
Outlook также отображает ошибку при сохранении этого сообщения (это происходит после того, как пользователь нажимает кнопку «Показать внешние изображения», затем закрывает сообщение, Outlook отображает диалоговое окно «Сохранить изменения?», И пользователь соглашается).
Однако PidTagBlockStatus не является вычислимым свойством. Я не могу понять, почему это происходит. У меня есть другой файл .MSG, который является почти копией первого (OutlookSpy и MFCMapi показывают, что оба файла .MSG имеют одинаковые поля / значения), но для этого файла я могу установить PR_BLOCK_STATUS. Однако эти файлы имеют разную длину, и низкоуровневые утилиты, такие как SSView, показывают, что в более крупном (и «рабочем») файле больше полей. Однако эти загадочные поля не отображаются в OutlookSpy или MFCMapi.
Проблема не связана с неправильной настройкой PidTagMessageDeliveryTime, поскольку оба сообщения (рабочее и нерабочее) имеют одинаковый PidTagMessageDeliveryTime (а также другие поля). Сам Outlook (который знает, как правильно установить PR_BLOCK_STATUS из PidTagMessageDeliveryTime) не может завершить операцию сохранения сообщения.
«Рабочий» файл был сохранен прямо из Outlook, «нерабочий» - с помощью стороннего ПО. Мне нужно найти способ «исправить» нерабочий файл, чтобы Outlook мог без проблем сохранять PR_BLOCK_STATUS.
Еще кое-что. Можно вообще просто удалить PR_BLOCK_STATUS из .MSG. Это, однако, приводит к тому, что после того, как пользователь нажимает кнопку «Показать внешние изображения», Outlook правильно устанавливает PR_BLOCK_STATUS, но сообщение становится пустым в Outlook до тех пор, пока оно не откроется в следующий раз. Так что и у меня этот метод не работает. Для этого я добавляю PR_BLOCK_STATUS в сообщение и устанавливаю его равным нулю (позволяя Outlook вычислять правильное значение, если пользователь решил отображать внешние изображения). При значении по умолчанию, равном нулю, Outlook обычно показывает сообщение после нажатия кнопки «Показать внешние изображения», но не может обновить файл .MSG при закрытии сообщения.
Другой метод - заранее вычислить PR_BLOCK_STATUS в состоянии «показать внешние изображения» (как описано в html email Outlook просит загрузить изображения тема), но я не могу этого понять, так как это должно быть решение пользователя для каждого конкретного сообщения, а не мое.
Ссылки на файлы .MSG (хорошие / рабочие и плохие / нерабочие) https://dl.dropboxusercontent.com/u/18102725/msgs.zip
Использование 64-разрядной версии Outlook 2010, 64-разрядной версии Windows 7 Ultimate, OutlookSpy 3.7.