|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我感觉可以顶到50楼,出乎意料的是大家居然纷纷写出自己的博文,还被编辑做成了专题,置于首页头条。smtp OpenSmtp是.Net平台上一个不错的邮件发送组件,可是个中存在一些bug影响我们的利用,我在利用中碰到了邮件主题长度较年夜时,邮件呈现乱码的情形。
经由反省源代码发明,本来的处置历程存在成绩:起首主题是经由过程ASCII编码的,其次,利用了QP编码,但没有思索主题与内容的区分。
在主题中编码时,每行必需都要独自编码,不成将主题全体编码。
经由与OutlookExpress对照,在MailEncoding类中增添一个办法,专门针对邮件主题举行Base64编码
publicstaticstringConvertHeaderToBase64(strings,stringcharset)
{
intlineLength=40;//每行处置40个字节
Encodingencoding=Encoding.GetEncoding(charset);//取指定编码
byte[]buffer=encoding.GetBytes(s);//转换为字节码
StringBuildersb=newStringBuilder();//保留终极了局
stringlinebase64;
intblock=buffer.Length%lineLength==0?buffer.Length/lineLength:buffer.Length/lineLength+1;
for(inti=0;i<block;i++)
{
if(buffer.Length-i*lineLength>=lineLength)
linebase64=Convert.ToBase64String(buffer,i*lineLength,lineLength);
else
linebase64=Convert.ToBase64String(buffer,i*lineLength,buffer.Length-i*lineLength);
sb.Append("=?");
sb.Append(charset);
sb.Append("?B?");
sb.Append(linebase64);
sb.Append("?=
");
}
sb.Remove(sb.Length-3,3);//删除最初的换行标记
returnsb.ToString();
}
然后,将MailMessage类中的ToString办法中对邮件主题的处置修正为挪用自界说的办法
//sb.Append("Subject:"+MailEncoder.ConvertHeaderToQP(cleanSubject.ToString(),charset)+"
");
sb.Append("Subject:"+MailEncoder.ConvertHeaderToBase64(cleanSubject.ToString(),charset)+"
");
从头编译便可
以前很热炒跨平台,主要是由于硅谷挑战微软霸主地位的热情,但是冷静下来后,跨平台往往不是那么一回事。假设你有个软件,所谓的跨平台,你只需要为第二个平台上重新编译一次就行了,这样很难么? |
|