如何使用SendGrid for C#发送带有UTF-8编码的text / html的电子邮件?

时间:2013-07-09 17:11:20

标签: c# email smtp sendgrid

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

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中得到了这个。我在这个方法中采取了错误的方法吗?

2 个答案:

答案 0 :(得分:0)

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

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

有了这个,请引用维基百科:

  

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

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

答案 1 :(得分:0)

您可以定义邮件的编码:

message.HtmlTransferEncoding = TransferEncoding.Base64;

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

快乐的编码!