问题:ä
中的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);
});
}
我尝试了以下内容:
答案 0 :(得分:0)
你有没有尝试过转换它?只是使用你的价值,因为你已经有了角色吗?
我看到有些人遇到同样的问题报告他们发现他们的数据已经是UTF8,因此转换它会导致报告中出现混乱的字符。在这些情况下,使用它们的字符串值直接解决了显示问题。
我发现很多人在使用关键字的不同背景下遇到同样的问题:
ä character converted to ä hotmail
答案 1 :(得分:0)
如果System.Net.Mail没有为您正确执行此操作,您可以尝试使用MimeKit的MimeKit.Utils.Rfc2047实用程序类来编码和解码标头值。
对于To
,Cc
,Bcc
等电子邮件地址的显示名称,您需要使用EncodePhrase和Subject
,等你要使用EncodeText。
不幸的是,这些并不是真的设计用于System.Net.Mail,因为您会注意到它们不返回字符串,它们返回byte [](这是因为它们被设计为在MimeKit内部使用 - 它们仅供高级用途公开。
也就是说,由于从这些方法返回的byte []是US-ASCII,您可以使用System.Text.Encoding.ASCII.GetString (result)
将编码主题转换回您可以在MailMessage
上设置的字符串。如果您遇到System.Net.Mail,那么这可能是您唯一的选择。如果没有,我强烈建议删除System.Net.Mail并将其替换为MimeKit和MailKit(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;
}