• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: 小 中 大 | 推荐给好友 上一篇 | 下一篇

C#写的支持SMTP验证的发送邮件组件(2)

发布: 2007-6-30 23:38 | 作者: admin | 来源: | 查看: 11次 | 进入软件测试论坛讨论

领测软件测试网         /// <summary>
        /// 接收SMTP服务器回应
        /// </summary>
        private string RecvResponse()
        {
            int StreamSize;
            string ReturnValue = "";
            byte[]  ReadBuffer = new byte[1024] ;
            try
            {
                StreamSize=ns.Read(ReadBuffer,0,ReadBuffer.Length);
            }
            catch
            {
                errmsg="网络连接错误";
                return "false";
            }

            if (StreamSize==0)
            {
                return ReturnValue ;
            }
            else
            {
                ReturnValue = Encoding.Default.GetString(ReadBuffer).Substring(0,StreamSize);
                logs+=ReturnValue;
                return  ReturnValue;
            }
        }


        /// <summary>
        /// 与服务器交互,发送一条命令并接收回应。
        /// </summary>
        /// <param name="Command">一个要发送的命令</param>
        /// <param name="errstr">如果错误,要反馈的信息</param>
        private bool Dialog(string Command,string errstr)
        {
            if(Command==null||Command.Trim()=="")
            {
                return true;
            }
            if(SendCommand(Command))
            {
                string RR=RecvResponse();
                if(RR=="false")
                {
                    return false;
                }
                string RRCode=RR.Substring(0,3);
                if(RightCodeHT[RRCode]!=null)
                {
                    return true;
                }
                else
                {
                    errmsg+=(RRCode+ErrCodeHT[RRCode].ToString());
                    errmsg+=enter;
                    errmsg+=errstr;
                    return false;
                }
            }
            else
            {
                return false;
            }

        }


        /// <summary>
        /// 与服务器交互,发送一组命令并接收回应。
        /// </summary>

        private bool Dialog(string[] Command,string errstr)
        {
            for(int i=0;i<Command.Length;i++)
            {
                if(!Dialog(Command[i],""))
                {
                    errmsg+=enter;
                    errmsg+=errstr;
                    return false;
                }
            }

            return true;
        }



        private bool SendEmail()
        {
            //连接网络
            try
            {
                tc=new TcpClient(mailserver,mailserverport);
            }
            catch(Exception e)
            {
                errmsg=e.ToString();
                return false;
            }

            ns = tc.GetStream();
            SMTPCodeAdd();

            //验证网络连接是否正确
            if(RightCodeHT[RecvResponse().Substring(0,3)]==null)
            {
                errmsg="网络连接失败";
                return false;
            }


            string[] SendBuffer;
            string SendBufferstr;

            //进行SMTP验证
            if(ESmtp)
            {
                SendBuffer=new String[4];
                SendBuffer[0]="EHLO " + mailserver + enter;
                SendBuffer[1]="AUTH LOGIN" + enter;
                SendBuffer[2]=Base64Encode(username) + enter;
                SendBuffer[3]=Base64Encode(password) + enter;
                if(!Dialog(SendBuffer,"SMTP服务器验证失败,请核对用户名和密码。"))
                    return false;
            }
            else
            {
                SendBufferstr="HELO " + mailserver + enter;
                if(!Dialog(SendBufferstr,""))
                    return false;
            }

            //
            SendBufferstr="MAIL FROM:<" + From + ">" + enter;
            if(!Dialog(SendBufferstr,"发件人地址错误"))
                return false;

            //
            SendBuffer=new string[10];
            for(int i=0;i<Recipient.Count;i++)
            {

                SendBuffer[i]="RCPT TO:<" + Recipient[i].ToString() +">" + enter;

            }
            if(!Dialog(SendBuffer,"收件人地址有误"))
                return false;

            SendBuffer=new string[10];
            for(int i=0;i<RecipientBCC.Count;i++)
            {

                SendBuffer[i]="RCPT TO:<" + RecipientBCC[i].ToString() +">" + enter;

            }
            if(!Dialog(SendBuffer,"密件收件人地址有误"))
                return false;

            SendBufferstr="DATA" + enter;
            if(!Dialog(SendBufferstr,""))
                return false;

            SendBufferstr="From:" + FromName + "<" + From +">" +enter;
            SendBufferstr+="To:" + RecipientName + "<" + Recipient[0] +">" +enter;
            SendBufferstr+="CC:";
            for(int i=1;i<Recipient.Count;i++)
            {
                SendBufferstr+=Recipient[i].ToString() + "<" + Recipient[i].ToString() +">,";
            }
            SendBufferstr+=enter;


            if(ReplyTo.Trim()!="")
            {
                SendBufferstr+="Reply-To: " + ReplyTo + enter;
            }

            if(Charset=="")
            {
                SendBufferstr+="Subject:" + Subject + enter;
            }
            else
            {
                SendBufferstr+="Subject:" + "=?" + Charset.ToUpper() + "?B?" + Base64Encode(Subject) +"?=" +enter;
            }

            SendBufferstr+="MIME-Version: 1.0" + enter;

            if(Html)
            {
                SendBufferstr+="Content-Type: text/html;" + enter;
            }
            else
            {
                SendBufferstr+="Content-Type: text/plain;" + enter;
            }

            if(Charset=="")
            {
                SendBufferstr+="charset=\"iso-8859-1\"" + enter;
            }
            else
            {
                SendBufferstr+="charset=\"" + Charset.ToLower() + "\"" + enter;
            }

            SendBufferstr+="Content-Transfer-Encoding: base64" + enter;
            SendBufferstr+="X-Priority:" + priority + enter;
            SendBufferstr+="X-MSMail-Priority:" + priority + enter;
            SendBufferstr+="Importance:" + priority + enter;
            SendBufferstr+="X-Mailer: Huolx.Pubclass" + enter;
            SendBufferstr+= enter + enter;
            SendBufferstr+= Base64Encode(Body) + enter;
            SendBufferstr+=enter + "." + enter;

            if(!Dialog(SendBufferstr,"错误信件信息"))
                return false;


            SendBufferstr="QUIT" + enter;
            if(!Dialog(SendBufferstr,"断开连接时错误"))
                return false;


            ns.Close();
            tc.Close();
            return true;
        }


        /// <summary>
        /// 发送邮件方法,所有参数均通过属性设置。
        /// </summary>
        public bool Send()
        {
            if(Recipient.Count==0)
            {
                errmsg="收件人列表不能为空";
                return false;
            }

            if(RecipientName=="")
                RecipientName=Recipient[0].ToString();

            if(mailserver.Trim()=="")
            {
                errmsg="必须指定SMTP服务器";
                return false;
            }

            return SendEmail();
            
        }


        /// <summary>
        /// 发送邮件方法
        /// </summary>
        /// <param name="smtpserver">smtp服务器信息,如"username:[email protected]:25",也可去掉部分次要信息,如"www.smtpserver.com"</param>
        public bool Send(string smtpserver)
        {
            
            MailDomain=smtpserver;
            return Send();
        }


        /// <summary>
        /// 发送邮件方法
        /// </summary>
        /// <param name="smtpserver">smtp服务器信息,如"username:[email protected]:25",也可去掉部分次要信息,如"www.smtpserver.com"</param>
        /// <param name="from">发件人mail地址</param>
        /// <param name="fromname">发件人姓名</param>
        /// <param name="replyto">回复邮件地址</param>
        /// <param name="to">收件人地址</param>
        /// <param name="toname">收件人姓名</param>
        /// <param name="html">是否HTML邮件</param>
        /// <param name="subject">邮件主题</param>
        /// <param name="body">邮件正文</param>
        public bool Send(string smtpserver,string from,string fromname,string replyto,string to,string toname,bool html,string subject,string body)
        {
            MailDomain=smtpserver;
            From=from;
            FromName=fromname;
            ReplyTo=replyto;
            AddRecipient(to);
            RecipientName=toname;
            Html=html;
            Subject=subject;
            Body=body;
            return Send();
            
        }
    }
}
 

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:[email protected] 电话:010-51297073

软件测试 | 领测国际 | ISTQB | ISTQB官网 | TMMi | TMMi认证 | 国际软件测试工程师认证 | 领测软件测试网