网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > ASP.NET技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.ASP.NET中利用存储过程实现模糊查.
.Asp.net 2.0 Treeview 无限级无刷.
.将ASP.NET页面内的数据导出到Exc.
.ASPX保存远程图片到本地的两种方.
.从 PHP 迁移到 ASP.NET.
.利用ASP.NET技术动态生成HTML页面.
.ASP.NET中在线用户统计的简单实现.
.用asp.net还原与恢复sqlserver数.
.用GZip压缩和解压.
.Asp.net+Xml实现无数据库论坛一点.
.获取汉字拼音的第一个字母 .
.图片地址防盗链,通过IHttpHandle.
.在asp.net中操作sql server数据库.
.ASP.NET ViewState 初探 (1).
.ASP.NET控件开发之"代码紧凑原则".
.asp.net 2.0中的URL重写以及urlM.
..Net 下信号量(Semaphore)的一种.
.ASP.NET的错误处理机制.
.ASP.NET 2.0 Web窗体语法指导.
.在ASP.NET页面上轻松整合JavaScr.

关于OpenSmtp邮件标题过长后出现乱码问题的解决

发表日期:2006-2-26


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

上一篇:使用@Page指令的Src属性 简化对老版本的asp.net程序的维护 人气:6316
下一篇:ASP.NET小技巧:重写ViewState的存储目的地,以提高页面性能 人气:6720
浏览全部OpenSmtp的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐