Транспортный агент Exchange нарушает кодировку тела, когда BodyFormat имеет значение Rtf. Что я делаю неправильно? - PullRequest
0 голосов
/ 07 ноября 2019

Я пишу транспортный агент, чтобы изменить текст некоторых писем. Поскольку речь идет только об удалении нескольких простых ключевых слов ascii, я старался не различать разные форматы тела:

EmailMessage message = e.MailItem.Message;

var encoding = Charset.GetEncoding(message.Body.CharsetName);

string body;
using (var reader = new StreamReader(message.Body.GetContentReadStream(), encoding, true))
    body = reader.ReadToEnd();

body.Replace("something", "");

using (var writer = new StreamWriter(message.Body.GetContentWriteStream(), encoding))
    writer.Write(body);

Это хорошо работает для текстовых и HTML-тел, протестированных с различными кодировками.

Однако для Rtf все специальные символы, такие как немецкие умлауты, ломаются. В этом случае Body.CharsetName возвращается как "utf-8", что преобразуется в encoding "System.Text.UTF8Encoding". Но я вижу текст внутри Rtf не UTF8, это ansicpg1252. Но так как я не касаюсь не ascii символов, почему это важно? Просто читая и записывая поток тела, немецкий Grüße выходит как Gr��e. Когда я не пишу новое тело, оно приходит правильно.

Как я могу сделать это правильно, чтобы оно работало для любого формата тела?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...