深圳升蓝软件
数据库开发 .Net技术  |  ASP技术 PHP技术 JSP技术 应用技术类   
Hiblue Software

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


March 25,2004
邮件发送类,支持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,"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
Copyright © 2001-2008 Shenzhen Hiblue Software Team All rights reserved