完全停留在与SendGrid提供的入站解析webhook功能有关的问题上:https://sendgrid.com/docs/for-developers/parsing-email/setting-up-the-inbound-parse-webhook/
首先,检索发送到我的应用程序端点的邮件一切正常。使用Request.Form
,我可以检索数据并使用它。
问题在于,当我们收到一些邮件(使用ÅÄ和Ö瑞典语书写)时,我们开始注意到问号符号而不是字母。发送纯文本邮件和带有HTML正文的邮件时都会发生这种情况。
但是,这只是偶尔发生。经过大量搜索后,我发现邮件是否是从例如Postbox或Outlook(或类似产品),并且应用程序将字符集设置为iso-8859-1,即用问号替换ÅÄÖ时。
要复制错误并能够对其进行调试,我使用iso-8859-1编码设置了带有表单的HTML页面,并发送了与上述链接中所显示的有效负载类似的有效负载(默认值)。在那之后,通过测试多种方法来使其正常工作。
到目前为止,我正在尝试重新编码输入,但没有成功。我正在测试的代码:
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()
};
}
由FetchMail(Request.Form);
项目信息:ASP.NET Core 2.2,C#
因此,如前所述,我完全陷入困境,对如何解决这个问题真的没有任何想法。任何帮助将不胜感激!