[英]encoding to UTF-8 in email
我有一個客戶收到的電子郵件編碼不正確。 我正在使用 System.Net.Mail 類並將正文編碼設置為 UTF-8。 我做了一些閱讀,因為我必須將電子郵件的正文設置為將數據編碼為 UTF-8 字節數組的字符串對我來說真的沒有任何作用,因為我必須將其轉換回 UTF- 16. 正確的?
當我發送: Il s'agit d'un message de test pour déterminer comment le système va gérer les message envoyés à l'aide des caractères français。 Merci et bonne journée。
他們看到: *Il s'agit d'un message de test pour déterminer comment le systéme va gérer les messages envoyés à l'aide des caractères français。
Merci et bonne journée.*
我在電子郵件上嘗試了不同的編碼,但我真的懷疑客戶端錯誤地解碼了電子郵件,因為我的電子郵件客戶端正確顯示了這一點。 我錯過了什么嗎? 還有什么可以做的嗎?
下面的代碼
SmtpMailService.SendMail(string.Empty, toAddress, "emailaddress@emai.com", "", subject, sb.ToString(), false);
public static bool SendMail(string fromAddress, string toAddress, string ccAddress, string bccAddress, string subject, string body, bool isHtmlBody)
{
if (String.IsNullOrEmpty(toAddress)) return false;
var toMailAddress = new MailAddress(toAddress);
var fromMailAddress = new MailAddress(String.IsNullOrEmpty(fromAddress) ? DefaultFromAddress : fromAddress);
var mailMessage = new MailMessage(fromMailAddress, toMailAddress);
if (!String.IsNullOrEmpty(ccAddress))
{
mailMessage.CC.Add(new MailAddress(ccAddress));
}
if (!String.IsNullOrEmpty(bccAddress))
{
mailMessage.Bcc.Add(new MailAddress(bccAddress));
}
if (!string.IsNullOrEmpty(fromAddress)) mailMessage.Headers.Add("Reply-To", fromAddress);
mailMessage.Subject = subject;
mailMessage.IsBodyHtml = isHtmlBody;
mailMessage.Body = body;
mailMessage.BodyEncoding = System.Text.Encoding.UTF8;
var enableSslCfg = ConfigurationManager.AppSettings["Email.Ssl"];
var enableSsl = string.IsNullOrEmpty(enableSslCfg) || bool.Parse(enableSslCfg);
var client = new SmtpClient {EnableSsl = enableSsl};
client.Send(mailMessage);
return true;
}
最終解決了我的問題的是在備用視圖上設置內容類型。 盡管 Gmail 正確顯示了電子郵件,但僅設置 msg.BodyEncoding 在(除其他外)Outlook 中不起作用。
var msg = new MailMessage()
msg.BodyEncoding = Encoding.GetEncoding(1252);
msg.IsBodyHtml = true;
//htmlBody is a string containing the entire body text
var htmlView = AlternateView.CreateAlternateViewFromString(htmlBody, new ContentType("text/html"));
//This does the trick
htmlView.ContentType.CharSet = Encoding.UTF8.WebName;
msg.AlternateViews.Add(htmlView);
您的示例清楚地表明您發送的文本具有 UTF-8 編碼,該編碼被解釋為 Windows-1252 或 ISO-8859-1 編碼(請參閱幾個編碼錯誤的結果,尤其是此處表中的最后一行)。
所以您的代碼似乎沒問題,問題可能在於客戶端只是忽略了郵件正文的編碼(例如,因為他們將其嵌入到 HTML 頁面中,而包裝器 HTML 使用默認的 ISO-8859-1 編碼)。
嘗試將郵件發送到其他提供商(例如 Gmail)並檢查結果。 配置良好的提供者應該處理正文編碼。
解決方案1
如果上述假設為真,則必須在客戶端修復錯誤。 他們應該處理正文編碼,或者如果它總是 UTF-8,他們應該簡單地將以下標記添加到 HTML 標頭中:
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
解決方案2
如果您不能以任何代價影響客戶端,您可能想嘗試使用另一種編碼:
mailMessage.BodyEncoding = System.Text.Encoding.GetEncoding("ISO-8859-1");
請注意,您的程序會以這種方式正確; 但是,非西歐語言將無法正確顯示。
唯一的方法是用合適的字符替換字符,因為您正在使用字符映射並且 html 將您的代碼編碼為不同的垃圾字符
您可以修改您的代碼,如:
WebClient myClient = new WebClient();
byte[] requestHTML;
string currentPageUrl = HttpContext.Current.Request.Url.AbsoluteUri;
UTF8Encoding utf8 = new UTF8Encoding();
requestHTML = myClient.DownloadData(currentPageUrl);
var str = utf8.GetString(requestHTML);"
str = str.Replace("’", "'");
嘗試:
mailMessage.BodyEncoding = UTF8Encoding.UTF8;
代替:
mailMessage.BodyEncoding = System.Text.Encoding.UTF8;
我在郵件中的口音也有類似的問題。 我的解決方案是:
mail.BodyEncoding = System.Text.Encoding.UTF8;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.