C# ä;MailMessage中的字符。主题显示为ä;在hotmail中

C# ä;MailMessage中的字符。主题显示为ä;在hotmail中,c#,.net,encoding,mvcmailer,C#,.net,Encoding,Mvcmailer,问题:邮件中的ä字符。主题在hotmail中显示为Ã。在Gmail中,主题中的ä字符看起来不错。如何正确编码MailMessage.Subject,使ä字符不会转换为à 这是我创建邮件消息的方式(使用): 我尝试了以下方法: x、 SubjectEncoding=Encoding.UTF8 x、 SubjectEncoding=Encoding.GetEncoding(“ISO-8859-1”) 您是否尝试过不转换它?只是使用你的值,因为你已经有了字符 我看到一些有同样问题的人报告说他们发现他

问题
邮件中的
ä
字符。主题
在hotmail中显示为
Ã
。在Gmail中,主题中的
ä
字符看起来不错。如何正确编码
MailMessage.Subject
,使
ä
字符不会转换为
Ã

这是我创建邮件消息的方式(使用):

我尝试了以下方法:

  • x、 SubjectEncoding=Encoding.UTF8
  • x、 SubjectEncoding=Encoding.GetEncoding(“ISO-8859-1”)
      您是否尝试过不转换它?只是使用你的值,因为你已经有了字符

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

      我发现很多人都有同样的问题,在不同的环境中使用关键词:

           ä character converted to ä hotmail
      

      你试过不转换它吗?只是使用你的值,因为你已经有了字符

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

      我发现很多人都有同样的问题,在不同的环境中使用关键词:

           ä character converted to ä hotmail
      

      如果System.Net.Mail不能正确执行此操作,则可以尝试使用的实用程序类对标头值进行编码和解码

      对于
      抄送
      密件抄送
      等中的电子邮件地址显示名称,您需要使用;对于
      主题
      等,您需要使用

      不幸的是,它们并不是真正设计用于System.Net.Mail的,因为您会注意到它们不返回字符串,而是返回字节[](这是因为它们是设计用于在MimeKit内部使用的-它们仅用于高级用途)

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


      希望对您有所帮助。

      如果System.Net.Mail不能正确执行此操作,您可以尝试使用的实用程序类对标头值进行编码和解码

      对于
      抄送
      密件抄送
      等中的电子邮件地址显示名称,您需要使用;对于
      主题
      等,您需要使用

      不幸的是,它们并不是真正设计用于System.Net.Mail的,因为您会注意到它们不返回字符串,而是返回字节[](这是因为它们是设计用于在MimeKit内部使用的-它们仅用于高级用途)

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


      希望对您有所帮助。

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

       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;
          }  
      

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

       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;
          }  
      

      是的,我试着不转换它-它并没有解决问题。真是太糟糕了。其他邮件提供商是否也有这种情况?除了Hotmail?如果可能的话,我建议您测试尽可能多的邮件客户端,以确定正在发生的事情。这也将有助于您搜索有关该问题的更多信息,因为我发现了很多信息,这对于hotmail来说并不特殊,因此很难判断哪些信息可能有用,哪些信息可能无效例如,Outlook express可能由于其默认设置而出现编码问题。祝你好运是的,我试着不转换它-它并没有解决问题。真是太糟糕了。其他邮件提供商是否也有这种情况?除了Hotmail?如果可能的话,我建议您测试尽可能多的邮件客户端,以确定正在发生的事情。这也将有助于您搜索有关该问题的更多信息,因为我发现了很多信息,这对于hotmail来说并不特殊,因此很难判断哪些信息可能有用,哪些信息可能无效例如,Outlook express可能由于其默认设置而出现编码问题。祝你好运给了我同样的结果。这就是hotmail中原始数据的外观:主题:BestÃllningsbekrÃftelse内容类型:text/html;charset=utf-8内容传输编码:base64I正在使用MvcMailer。我认为MvcMailer继承自System.Net.Mail类。我必须使用MvcMailer,因为我需要使用它的模板功能。也许有一种选择是编写一个从MvcMailerMessage继承的新CustomMvcMailerMessage?还可以编写一个新的自定义SMTP类,使用MailKit扩展MvcMailer SMTP对象?如果主题标题看起来像
      Subject:BestÃllningsbekrÃftelse
      ,则有人正在解码标题,Hotmail由于某种原因无法正确呈现。FWIW,它看起来像是UTF-8,使用iso-8859-1编码转换成unicode显示字符串。给了我相同的结果。这就是hotmail中原始数据的外观:主题:BestÃllningsbekrÃftelse内容类型:text/html;charset=utf-8内容传输编码:base64我正在使用MvcMail