äMallMessage.Subject中的字符在hotmail中显示为ä

时间:2015-06-24 22:00:12

标签: c# .net encoding mvcmailer

问题ä中的MailMessage.Subject字符在hotmail中显示为ä。在Gmail中,主题中的ä字符看起来很好。您如何正确编码MailMessage.Subject,以便ä字符不会转换为ä

这就是我创建MailMessage的方式(使用MvcMailer):

public virtual MvcMailMessage OrderConfirmation()
    {
        return Populate(x =>
        {
            x.Subject = "Beställningsbekräftelse";
            x.From = new MailAddress("test@test.com", "test.com");
            x.ViewName = "OrderConfirmation";
            x.To.Add(order.Email);
        });
    }

我尝试了以下内容:

  • x.SubjectEncoding = Encoding.UTF8;
  • x.SubjectEncoding = Encoding.GetEncoding(“ISO-8859-1”);

3 个答案:

答案 0 :(得分:0)

你有没有尝试过转换它?只是使用你的价值,因为你已经有了角色吗?

我看到有些人遇到同样的问题报告他们发现他们的数据已经是UTF8,因此转换它会导致报告中出现混乱的字符。在这些情况下,使用它们的字符串值直接解决了显示问题。

我发现很多人在使用关键字的不同背景下遇到同样的问题:

     ä character converted to ä hotmail

答案 1 :(得分:0)

如果System.Net.Mail没有为您正确执行此操作,您可以尝试使用MimeKitMimeKit.Utils.Rfc2047实用程序类来编码和解码标头值。

对于ToCcBcc等电子邮件地址的显示名称,您需要使用EncodePhraseSubject,等你要使用EncodeText

不幸的是,这些并不是真的设计用于System.Net.Mail,因为您会注意到它们不返回字符串,它们返回byte [](这是因为它们被设计为在MimeKit内部使用 - 它们仅供高级用途公开。

也就是说,由于从这些方法返回的byte []是US-ASCII,您可以使用System.Text.Encoding.ASCII.GetString (result)将编码主题转换回您可以在MailMessage上设置的字符串。如果您遇到System.Net.Mail,那么这可能是您唯一的选择。如果没有,我强烈建议删除System.Net.Mail并将其替换为MimeKitMailKit(MailKit可用于SMTP,POP3和/或IMAP)。

希望有所帮助。

答案 2 :(得分:0)

您必须在从MailerBase派生的类上重写PopulateHtmlPart

.php

并设置编码

 public override AlternateView PopulateHtmlPart(MailMessage mailMessage, string viewName, string masterName, Dictionary<string, string> linkedResources)
    {
        var htmlPart = base.PopulateHtmlPart(mailMessage, viewName, masterName, linkedResources);
        htmlPart.ContentType.CharSet = mailMessage.BodyEncoding.HeaderName;
        return htmlPart;
    }