【问题标题】:How to send an email with its text/html encoded in UTF-8 using SendGrid for C#?如何使用 SendGrid for C# 发送带有 UTF-8 编码的文本/html 的电子邮件?
【发布时间】:2013-07-09 17:11:20
【问题描述】:

我正在尝试发送包含 á、é、ó、í、ú 等特殊字符的电子邮件。我的代码如下所示:

try
{
   Mail message = Mail.GetInstance();
   foreach (Users u in users)
   {
       message.AddBcc(u.Email);
   }
   message.From = new MailAddress(Microsoft.WindowsAzure.CloudConfigurationManager
       .GetSetting("emailFrom"), Microsoft.WindowsAzure.CloudConfigurationManager
       .GetSetting("emailFromName"));
   message.Subject = Microsoft.WindowsAzure.CloudConfigurationManager
       .GetSetting("emailSubject");

   message.Html = "<meta charset=\"UTF-8\"/>" + 
       Microsoft.WindowsAzure.CloudConfigurationManager.GetSetting("emailText1") + 
       " " + address+ ".<br/>" + 
       Microsoft.WindowsAzure.CloudConfigurationManager.GetSetting("emailText2");

   var transport = SMTP.GetInstance(new NetworkCredential(
       Microsoft.WindowsAzure.CloudConfigurationManager.GetSetting("emailLogin"), 
       Microsoft.WindowsAzure.CloudConfigurationManager.GetSetting("emailPass")));
   transport.Deliver(message);
   isEmailSent = true;
}
catch (Exception ex)
{
    Debug.WriteLine(ex.Message + " \n " + ex.InnerException + " \n " + ex.StackTrace);
    isEmailSent = false;
}

我试图在我发送的 Html 中指定字符集,但它不起作用,而不是发送 San Jerónimo Amanal,而是发送 San Jerónimo Amanal 的内容。

如何以正确的编码发送它?任何帮助将不胜感激。

编辑

我尝试了这两种方法:

   message.Html = "<meta charset=\"UTF-8\"/>" + 
       Microsoft.WindowsAzure.CloudConfigurationManager.GetSetting("emailText1") + 
       " " + address+ ".<br/>" + 
       Microsoft.WindowsAzure.CloudConfigurationManager.GetSetting("emailText2");

还有这个:

   message.Html = Microsoft.WindowsAzure.CloudConfigurationManager.GetSetting
       ("emailText1") + " " + address+ ".<br/>" + 
       Microsoft.WindowsAzure.CloudConfigurationManager.GetSetting("emailText2");

但是电子邮件仍然以错误的编码发送。

编辑 2

我尝试了Converting Unicode strings to escaped ascii string这个问题的答案,更具体地说,我尝试了EncodeNonAsciiCharacters的方法,但我在电子邮件San Jer\u00c3\u00b3nimo Amanal中得到了这个。我在这件事中采取了错误的方法吗?

【问题讨论】:

  • 我认为问题在于,尽管您可能已将数据存储在 UTF8 中,但将其读入 .NET 字符串会导致它被转换回双字节。如果省略元字符集标记,它看起来正确吗?
  • 它仍然在没有正确编码的情况下发送消息

标签: c# email smtp sendgrid


【解决方案1】:

好吧,这花了一些时间,但至少我找到了一种不带特殊字符发送电子邮件的方法,我必须normalize我使用规范化表单兼容性分解得到的字符串,即通过 String 类'Normalize method 完成,如下所示:

string normalizedString = InString.Normalize(NormalizationForm.FormKD);

引用自维基百科:

字符通过兼容性分解,多重组合 字符按特定顺序排列。

意思是如果还有一个字符的兼容性是由两个字符表示的,那么它将被所述字符替换。对于像é这样的字符,它将被替换为e。

【讨论】:

    【解决方案2】:

    您可以定义消息的编码:

    message.HtmlTransferEncoding = TransferEncoding.Base64;
    

    此示例使 ascii 表的第二部分能够正确显示。

    编码愉快!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-10
      • 2011-08-20
      • 1970-01-01
      • 1970-01-01
      • 2011-12-31
      • 2023-03-15
      • 1970-01-01
      • 2016-10-23
      相关资源
      最近更新 更多