中国站长下载-为中国站长提供最好最全的建站资源! 首 页发布资源有事留言繁體中文
设为首页
加入收藏
联系我们
 
您当前的位置:中国站长下载 -> 文章中心 -> 网页编程 -> .NET编程 -> 文章内容  虚拟主机 域名注册 退出登录 用户管理
栏目导航
· ASP编程 · .NET编程
· PHP编程 · JSP编程
· CGI 专区
热门文章
· sndvol32 - sndvol3...
· [组图] FLASH:《大话李白》...
· 个人网站到底能赚多...
· [图文] Rundll.exe是病毒吗...
· [组图] Flash:制作MV
· 价值12万元的网站SE...
· 网站创业者,你需要...
· 一个成功的网站设计...
· [图文] FLASH:韩国导航条解...
· 中国网站的赚钱模式...
相关文章
· 关于Dreamweaver乱码...
· PHP中路径问题的解决...
· .net中发mail到hotm...
· 移动硬盘常见问题的...
· 移动硬盘常见问题的...
· SQL2000管理SQL7服务...
· Oracle大文本在ASP中...
· 关于JSP中文问题的解...
关于OpenSmtp邮件标题过长后出现乱码问题的解决
作者:不详  来源:不详  发布时间:2006-8-14 8:49:43  发布人:chinazhan

 减小字体 增大字体

     OpenSmtp 是 .Net 平台上一个不错的邮件发送组件,但是其中存在一些 bug 影响我们的使用,我在使用中遇到了邮件主题长度较大时,邮件出现乱码的情况。
  
   经过检查源代码发现,原来的处理过程存在问题:首先主题是通过 ASCII 编码的,其次,使用了 QP 编码,但没有考虑主题与内容的区别。
  
   在主题中编码时,每一行必须都要单独编码,不可将主题全部编码。
  
   经过与 Outlook Express 对比,在 MailEncoding 类中增加一个方法,专门针对邮件主题进行 Base64 编码
  
  public static string ConvertHeaderToBase64(string s, string charset)
   {
   int lineLength = 40; // 每行处理 40 个字节
   Encoding encoding = Encoding.GetEncoding( charset ); // 取指定编码
   byte[] buffer = encoding.GetBytes( s ); // 转换为字节码
   StringBuilder sb = new StringBuilder(); // 保存最终结果
   string linebase64 ;
   int block = buffer.Length%lineLength==0?buffer.Length/lineLength:buffer.Length/lineLength + 1;
   for(int i=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( "?=\r\n\t" );
   }
   sb.Remove( sb.Length-3, 3); // 删除最后的换行符号
   return sb.ToString();
   }
  
   然后,将 MailMessage 类中的 ToString 方法中对邮件主题的处理修改为调用自定义的方法
  
  
  // sb.Append("Subject: " + MailEncoder.ConvertHeaderToQP(cleanSubject.ToString(), charset) + "\r\n");
   sb.Append("Subject: " + MailEncoder.ConvertHeaderToBase64( cleanSubject.ToString(), charset) + "\r\n");
  
   重新编译即可
  
  出处:haogj
  
  
    做人要厚道,请注明转自chinazhan中国站长(www.ChinaZhan.com)。

 
[] [返回上一页] [打 印] [收 藏]
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论...]
中国站长下载
中国站长下载

本页只接受PR>=4 IT类站点连接,申请连接,谢谢您们的支持!希望我们的下载站能够真正帮到中国的站长们!
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图
Copyright © 2005-2006 ChinaZhan.Net. All Rights Reserved .