我们一直使用System.Net.Mail给客户发各种邮件,系统供香港使用,但一直以来有一个问题:
有些版本的iphone及android收到邮件后会显示乱码,而我们自己的这两种类型的手机却正常,起初以为是编码问题,所以把相关属性都设置为utf-8,但问题依旧,后经过测试发现是因为Subject里有一些特殊字符,替换后便正常了,但数据来源不定,都进行替换不现实。
此事来来回回半年过去了,客户追着不放,同事再次研究了下,原因还是编码问题,不过需要特殊处理下Subject,而不是只设置下属性,此问题终于解决,柳永法(yongfa365)'Blog特此记录。
参考地址:http://blog.csdn.net/whowhen21/article/details/5959225
在做项目时候,用到.Net的System.Net.Mail发送邮件,经测试,发现如果标题过长,收到的就会是乱码了(那种Base64格式的数据),几经测试,发现只能放60个中文汉字,多一个标点就出问题,后来想办法,解决了,现奉上解决方案~
把邮件标题转换成base64编码的,但是有特定的要求
private static void Send()
{
StringBuilder title = new StringBuilder();
title.Append("=?utf-8?B?");
title.Append(ToBase64("长长的邮件标题测试"));
title.Append("?=");
SendMail(title, "内容");
}
private string ToBase64(string instr)
{
byte[] bt = Encoding.GetEncoding("utf-8").GetBytes(instr);
return Convert.ToBase64String(bt);
}
那里的utf-8是你设定的邮件编码,要和下面ToBase64中的一致才行。
当然,如果标题还是过长的话,这种还是会出现乱码,解决方法就是把标题拆分成若干段,没段都用StringBuilder那里的处理方法,最后在拼接起来作为标题,发送时没有问题的。至此,这个问题就解决啦。
不过也许这个问题和邮件服务器有关吧,我是在自己的服务器上才出现这个问题,163之类的我没测。希望能对遇到相同问题的童鞋有所帮助。
引用本页地址:
http://www.yongfa365.com/item/iphone-Android-System.Net.Mail-luanma.html