SendGrid входящий синтаксический анализ - PullRequest
0 голосов
/ 21 декабря 2018

Полностью застрял на проблеме, связанной с функцией входящего разбора webhook, предлагаемой SendGrid: https://sendgrid.com/docs/for-developers/parsing-email/setting-up-the-inbound-parse-webhook/

Во-первых, все отлично работает с получением почты, отправленной на конечную точку моего приложения.Используя Request.Form, я могу получить данные и работать с ними.

Проблема в том, что мы начали замечать символы вопросительного знака вместо букв при получении некоторых писем (написанных на шведском языке с использованием Å Ä и Ö),Это происходило как при отправке текстовых писем, так и писем с HTML-телом.

Однако это происходит время от времени.После долгих поисков я обнаружил, что если письмо отправляется, например, из Postbox или Outlook (или тому подобного), и в приложении для набора символов установлено значение iso-8859-1, то тогда Å Ä Ö заменяется знаками вопроса.

Чтобы повторить ошибку и иметь возможность ее отладки, я настроил HTML-страницу с формой, используя кодировку iso-8859-1, отправив полезную нагрузку, аналогичную той, которая указана в ссылке выше (по умолчанию),И после этого я протестировал множество вещей, пытаясь заставить его работать.

На данный момент я пытаюсь перекодировать ввод, но безуспешно.Код, который я тестирую:

        Encoding wind1252 = Encoding.GetEncoding(1252);
        Encoding utf8 = Encoding.UTF8;
        byte[] wind1252Bytes = wind1252.GetBytes(Request.Form.["html"]);
        byte[] utf8Bytes = Encoding.Convert(wind1252, utf8,wind1252Bytes);
        string utf8String = Encoding.UTF8.GetString(utf8Bytes);

Это приводит только к тому, что utf8String дает тот же результат с "???"где должны быть.Я предполагаю, что это возможно из-за того, что Request.Form ["html") возвращает строку UTF-16 содержимого, которое уже закодировано в неправильной кодировке iso-8859-1.

Методдля извлечения POST выглядит следующим образом:

public async Task<InboundParseModel> FetchMail(IFormCollection form)
{
        InboundParseModel _em = new InboundParseModel
        {
            To = form["to"].SingleOrDefault(),
            From = form["from"].SingleOrDefault(),
            Subject = form["subject"].SingleOrDefault(),
            Html = form["html"].SingleOrDefault(),
            Text = System.Net.WebUtility.HtmlEncode(form["text"].SingleOrDefault()),
            Envelope = form["envelope"].SingleOrDefault()
        };
}

Вызывается из другого метода, для которого выполняется POST FetchMail(Request.Form);

Информация о проекте : ASP.NET Core 2.2, C #

Итак, как уже говорилось ранее, я полностью застрял и не имею никаких идей о том, как решить эту проблему.Любая помощь будет высоко ценится!

...