Полностью застрял на проблеме, связанной с функцией входящего разбора 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 #
Итак, как уже говорилось ранее, я полностью застрял и не имею никаких идей о том, как решить эту проблему.Любая помощь будет высоко ценится!