Получение текста из BodytPart, когда IsHTML = True из кодированного HTML-кода Outlook 2016 - PullRequest
0 голосов
/ 30 января 2019

HTML Сообщения, отправленные из Outlook 2010, приходят в сообщении. Текст просто отлично.Я обнаружил, однако, что сообщения из Outlook 2016 не являются.TextBody является нулевым.Сообщение находится в HtmlBody.

Как мне извлечь текст сообщения?Я пытался использовать

 System.Web.HttpUtility.HtmlDecode(Regex.Replace(htmlContent, "<(.|\n)*?>", ""))

, но он только очищает некоторые, но не весь Office: беспорядок в стилях Word.

(мне кажется, я не могу скопировать HTML, поэтому надеюсьВы знаете, как это выглядит.)

Я использую MailKit в приложении VB.net.

1 Ответ

0 голосов
/ 31 января 2019

MailKit зависит от MimeKit, у которого есть HTML-токенайзер в пространстве имен MimeKit.Text.

Вы можете использовать его для удаления html-токенов и оставления только символьных данных.

using (var writer = new StringWriter ()) {
    using (var reader = new StringReader (html)) {
        var tokenizer = new HtmlTokenizer (reader) {
            DecodeCharacterReferences = true
        };
        HtmlToken token;

        while (tokenizer.ReadNextToken (out token)) {
            switch (token.Kind) {
            case HtmlTokenKind.Data:
                var data = (HtmlDataToken) token;
                writer.Write (data.Data);
                break;
            case HtmlTokenKind.Tag:
                var tag = (HtmlTagToken) token;
                switch (tag.Id) {
                case HtmlTagId.Br:
                    writer.Write (Environment.NewLine);
                    break;
                case HtmlTagId.P:
                    if (tag.IsEndTag || tag.IsEmptyElement)
                        writer.Write (Environment.NewLine);
                    break;
                }
                break;
            }
        }
    }

    return writer.ToString ();
}
...