Этот вопрос несколько длинен, но я потратил на него часы безрезультатно. У меня есть некоторый код, который генерирует файл электронной почты на веб-сервере и позволяет пользователю загрузить это письмо и открыть его в Outlook. Отсюда они могут вносить различные изменения в электронное письмо, прежде чем отправлять его нескольким людям.
Прямо сейчас я создаю файл .OFT, который по сути является шаблоном электронной почты. То, что я хочу сделать, это создать файл .MSG, который является реальным электронным письмом. С двоичной точки зрения кажется, что эти форматы файлов идентичны. Они имеют одинаковые идентификаторы потока, свойства и прочее.
Мой подход состоял в том, чтобы сначала создать пустое сообщение электронной почты в Outlook, а затем просто сохранить его в файле с именем Base.oft. В своем коде я открываю документ и изменяю идентификатор потока __substg1.0_1013001E
, который является идентификатором тела письма в формате HTML. Затем я сохраняю файл и записываю его в cilent. Это отлично работает.
Я попробовал тот же подход с форматом MSG. Я создал пустое сообщение электронной почты, сохранил его как Base.msg и изменил тот же идентификатор потока. Если я посмотрю на полученный файл, то новое тело будет там и сохранено. Однако, если я открою письмо, тело останется пустым.
Что еще более странно, если я наберу тело в Outlook и сохраню его в базовом файле, я вижу это тело в потоке 0_1013001E. Если затем я изменю этот поток с другим телом, я смогу убедиться, что новое тело действительно сохранено в файле, но если я открою сообщение в Outlook, я увижу старое, оригинальное тело. Это похоже на то, как если бы тело письма сохранялось в другом месте в файле для формата .MSG, однако я просмотрел каждый поток и не могу найти ничего другого, похожего на тело письма.
Возможно, файлы .MSG зашифрованы или их тела хранятся в каком-то проприетарном двоичном формате, в отличие от файлов .OFT? Надеюсь, у кого-то есть понимание этого, так как я изучил Интернет и практически ничего не нашел в этих форматах.
Обновление:
Похоже, что формат .MSG хранит тело в идентификаторе потока. __substg1.0_10090102
- который закодирован в некоторой двоичной форме (не уверен, что.) Если я удаляю поток (или устанавливаю его в один \0
, файл становится испорченным.