邮件发送类,支持HTML格式,支持优先级设置
点击次数:20 次 发布日期:2008-11-26 23:31:22 作者:源代码网
|
源代码网推荐 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,"rn"); 源代码网推荐 strSendBuffer[0] = strData ; 源代码网推荐 源代码网推荐 strData = ""; 源代码网推荐 strData = string.Concat("MAIL FROM: ","<" + From + ">"); 源代码网推荐 strData = string.Concat(strData,"rn"); 源代码网推荐 strSendBuffer[1] = strData; 源代码网推荐 源代码网推荐 strData = ""; 源代码网推荐 strData = string.Concat("RCPT TO: ","<" + To + ">"); 源代码网推荐 strData = string.Concat(strData,"rn"); 源代码网推荐 strSendBuffer[2] = strData; 源代码网推荐 源代码网推荐 strData = "" ; 源代码网推荐 strData = string.Concat("DATA","rn"); 源代码网推荐 strSendBuffer[3] = strData ; 源代码网推荐 源代码网推荐 strData = "" ; 源代码网推荐 strData = string.Concat("From: ",DisplayFromName + "<" + From + ">"); 源代码网推荐 strData = string.Concat(strData,"rn" ); 源代码网推荐 strData = string.Concat(strData,"To: " ); 源代码网推荐 strData = string.Concat(strData,DisplayToName + "<" + To + ">"); 源代码网推荐 strData = string.Concat(strData,"rn" ); 源代码网推荐 strData = string.Concat(strData,"Subject: " ); 源代码网推荐 strData = string.Concat(strData,Subject); 源代码网推荐 strData = string.Concat(strData,"rn"); 源代码网推荐 strData = string.Concat(strData,"MIME-Version: 1.0" ); 源代码网推荐 strData = string.Concat(strData,"rn"); 源代码网推荐 strData = string.Concat(strData,"X-Priority: " + Priority); 源代码网推荐 strData = string.Concat(strData,"rn"); 源代码网推荐 strData = string.Concat(strData,"X-MSMail-Priority: " + Priority); 源代码网推荐 strData = string.Concat(strData,"rn"); 源代码网推荐 if(Html == true) 源代码网推荐 { 源代码网推荐 strData = string.Concat(strData,"Content-Type: text/html;" ); 源代码网推荐 } 源代码网推荐 else 源代码网推荐 { 源代码网推荐 strData = string.Concat(strData,"Content-Type: text/plain;" ); 源代码网推荐 } 源代码网推荐 strData = string.Concat(strData,"rn"); 源代码网推荐 strData = string.Concat(strData,"charset="iso-8859-1"" ); 源代码网推荐 strData = string.Concat(strData,"rn"); 源代码网推荐 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,"rn"); 源代码网推荐 strData = string.Concat(strData,"Content-Base: "" + Base + """ ); 源代码网推荐 strData = string.Concat(strData,"rn" + "rn"); 源代码网推荐 源代码网推荐 strData = string.Concat(strData,Message); 源代码网推荐 strData = string.Concat(strData,"rn.rn"); 源代码网推荐 strSendBuffer[4] = strData; 源代码网推荐 源代码网推荐 strData = "" ; 源代码网推荐 strData = string.Concat(strData,"QUITrn"); 源代码网推荐 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 源代码网供稿. |
