邮件发送类,支持HTML格式,支持优先级设置

邮件发送类,支持HTML格式,支持优先级设置


作者:blood      出处:开发者俱乐部 邮件发送类,支持HTML格式,支持优先级设置      邮件发送类,支持html格式,支持优先级设置。通过socket类实现的using System;using System.Text;using System.IO;using System.Net;using System.Net.Sockets;  namespace Blood.Com.ClassLib{ /// <summary>/// TcpClient派生类,用来进行SMTP服务器的连接工作/// </summary>public class SMTPClient : TcpClient{public bool isConnected(){return Active;}  public void SendCommandToServer(string Command){NetworkStream ns = this.GetStream() ;byte[] WriteBuffer ;WriteBuffer = new byte[1024] ;WriteBuffer = Encoding.Default.GetBytes(Command) ;ns.Write(WriteBuffer,0,WriteBuffer.Length);return ;} public string GetServerResponse(){int StreamSize ;string ReturnValue = "" ;byte[] ReadBuffer ;NetworkStream ns = this.GetStream() ;ReadBuffer = new byte[1024] ;StreamSize = ns.Read(ReadBuffer,0,ReadBuffer.Length);if (StreamSize==0){return ReturnValue ;}else{ReturnValue = Encoding.Default.GetString(ReadBuffer);return ReturnValue;} }  public bool DoesStringContainSMTPCode(string s,string SMTPCode){return(s.IndexOf(SMTPCode,0,10)==-1)?false:true;}  } //结束类  /// <summary>/// 发送邮件类/// </summary>public class SMTPMail{/// <summary>/// 错误反馈信息/// </summary>private string strErrMessage = null;  /// <summary>/// SMTP服务器反馈的信息/// </summary>private string strResponse;  /// <summary>/// 构造函数/// </summary>public SMTPMail(){strErrMessage = "";strResponse = "";}  /// <summary>/// 取得错误反馈信息/// </summary>public string ErrorMessage{get{return strErrMessage ;}}  /// <summary>/// 取得SMTP服务器反馈的信息/// </summary>public string ServerResponse{get{return strResponse;}}  /// <summary>/// 邮件发送优先级/// </summary>public enum Prioritys{/// <summary>/// 最高级别/// </summary>HIGH = 1,/// <summary>/// 默认级别/// </summary>NORMAL = 3,/// <summary>/// 最低级别/// </summary>LOW = 5}  public void SendMail(string SmtpHost,int Port,string From,string DisplayFromName,string To,string DisplayToName,Prioritys Priority,bool Html,string Base,string Subject,string Message){try{string strResponseNumber;SMTPClient smtpcMail = new SMTPClient();smtpcMail.Connect(SmtpHost,Port);bool bolConnect = smtpcMail.isConnected();  //判断是否进行了连接if (!bolConnect){strErrMessage = "Smtp服务器连接失败...";return;}  //读取反馈信息strResponseNumber = smtpcMail.GetServerResponse();if (smtpcMail.DoesStringContainSMTPCode(strResponseNumber,"220")){this.strResponse  = strResponseNumber;}else{this.strErrMessage = "连接失败"  strResponseNumber;return ;}  string[] strSendBuffer = new string[6];string[] strResponseCode = {"220","250","251","354","221"}; // success codes from SMTP server  string strData = "";strData = string.Concat("HELO ",SmtpHost);strData = string.Concat(strData,"\r\n");strSendBuffer[0] = strData ;  strdata = "";strData = string.Concat("MAIL FROM: ","<"  From  ">");strData = string.Concat(strData,"\r\n");strSendBuffer[1] = strData;  strdata = "";strData = string.Concat("RCPT TO: ","<"  To  ">");strData = string.Concat(strData,"\r\n");strSendBuffer[2] = strData;  strdata = "" ;strData = string.Concat("DATA","\r\n");strSendBuffer[3] = strData ;  strdata = "" ;strData = string.Concat("From: ",DisplayFromName  "<"  From  ">");strData = string.Concat(strData,"\r\n" );strData = string.Concat(strData,"To: " );strData = string.Concat(strData,DisplayToName  "<"  To  ">");strData = string.Concat(strData,"\r\n" );strData = string.Concat(strData,"Subject: " );strData = string.Concat(strData,Subject);strData = string.Concat(strData,"\r\n");strData = string.Concat(strData,"MIME-Version: 1.0" );strData = string.Concat(strData,"\r\n");strData = string.Concat(strData,"X-Priority: "  Priority);strData = string.Concat(strData,"\r\n");strData = string.Concat(strData,"X-MSMail-Priority: "  Priority);strData = string.Concat(strData,"\r\n");if(Html == true){strData = string.Concat(strData,"Content-Type: text/html;" );}else{strData = string.Concat(strData,"Content-Type: text/plain;" );}strData = string.Concat(strData,"\r\n");strData = string.Concat(strData,"charset=\"iso-8859-1\"" );strData = string.Concat(strData,"\r\n");if(Html == true){strData = string.Concat(strData,"Content-Transfer-Encoding: text/html;" );}else{strData = string.Concat(strData,"Content-Transfer-Encoding: text/plain;" );}strData = string.Concat(strData,"\r\n");strData = string.Concat(strData,"Content-Base: \""  Base  "\"" );strData = string.Concat(strData,"\r\n"  "\r\n");  strdata = string.Concat(strData,Message);strData = string.Concat(strData,"\r\n.\r\n");strSendBuffer[4] = strData;  strdata = "" ;strData = string.Concat(strData,"QUIT\r\n");strSendBuffer[5] = strData;  int i = 0 ;  while(i < strSendBuffer.Length){smtpcMail.SendCommandToServer(strSendBuffer);strResponseNumber = smtpcMail.GetServerResponse();  for(int j=0;j<strResponseCode.Length;j  ){if (smtpcMail.DoesStringContainSMTPCode(strResponseNumber,strResponseCode[j])){this.strResponse  = strResponseNumber;this.strResponse  = "<br>";break;}else{if(j==strResponseCode.Length-1){this.strErrMessage  = strResponseNumber;this.strErrMessage  = strSendBuffer;return;}}}    i  ;} // 结束循环}catch(SocketException err){this.strErrMessage  = err.Message  " "  err.StackTrace;}catch(Exception e){this.strErrMessage  = e.Message  " "  e.StackTrace;}} //结束邮件发送方法  } // 结束类  } // 结束Namespace      (2005-10-03:02:26)

 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 您可能对 [Visual Studio.NET] 的这些文章也感兴趣:

介绍WorkFlow Engine
Apache Lucene与Lucene.Net——全文检索服务器
ManagedDirectX--Alpha混合
.NET泛型中的协变与逆变
初探Visual Studio 2008 Shell
.NET框架图解之一:Net基础,编译与执行引擎(上)
水晶报表编程及问题总结
Mono 1.2发布及对Miguel de Icaza的采访
使用VS快速将类方法封装成Web服务
VS 2008 Web部署项目支持发布了