SendGrid入站解析北欧字符

时间:2018-12-21 16:05:18

标签: c# asp.net webhooks sendgrid

完全停留在与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);

完成POST的另一种方法调用

项目信息:ASP.NET Core 2.2,C#

因此,如前所述,我完全陷入困境,对如何解决这个问题真的没有任何想法。任何帮助将不胜感激!

0 个答案:

没有答案