欢迎光临
我们一直在努力

建站超值云服务器,限时71元/月

        /// <summary>
        /// smtp回应代码哈希表
        /// </summary>
        private void smtpcodeadd()
        {
            errcodeht.add("500","邮箱地址错误");
            errcodeht.add("501","参数格式错误");
            errcodeht.add("502","命令不可实现");
            errcodeht.add("503","服务器需要smtp验证");
            errcodeht.add("504","命令参数不可实现");
            errcodeht.add("421","服务未就绪,关闭传输信道");
            errcodeht.add("450","要求的邮件操作未完成,邮箱不可用(例如,邮箱忙)");
            errcodeht.add("550","要求的邮件操作未完成,邮箱不可用(例如,邮箱未找到,或不可访问)");
            errcodeht.add("451","放弃要求的操作;处理过程中出错");
            errcodeht.add("551","用户非本地,请尝试<forward-path>");
            errcodeht.add("452","系统存储不足,要求的操作未执行");
            errcodeht.add("552","过量的存储分配,要求的操作未执行");
            errcodeht.add("553","邮箱名不可用,要求的操作未执行(例如邮箱格式错误)");
            errcodeht.add("432","需要一个密码转换");
            errcodeht.add("534","认证机制过于简单");
            errcodeht.add("538","当前请求的认证机制需要加密");
            errcodeht.add("454","临时认证失败");
            errcodeht.add("530","需要认证");

            rightcodeht.add("220","服务就绪");
            rightcodeht.add("250","要求的邮件操作完成");
            rightcodeht.add("251","用户非本地,将转发向<forward-path>");
            rightcodeht.add("354","开始邮件输入,以<enter>.<enter>结束");
            rightcodeht.add("221","服务关闭传输信道");
            rightcodeht.add("334","服务器响应验证base64字符串");
            rightcodeht.add("235","验证成功");
        }

        /// <summary>
        /// 将字符串编码为base64字符串
        /// </summary>
        /// <param name="estr">要编码的字符串</param>
        private string base64encode(string str)
        {
            byte[] barray;
            barray=encoding.default.getbytes(str);
            return convert.tobase64string(barray);
        }

        /// <summary>
        /// 将base64字符串解码为普通字符串
        /// </summary>
        /// <param name="dstr">要解码的字符串</param>
        private string base64decode(string str)
        {
            byte[] barray;
            barray=convert.frombase64string(str);
            return encoding.default.getstring(barray);
        }

       
        /// <summary>
        /// 得到上传附件的文件流
        /// </summary>
        /// <param name="filepath">附件的绝对路径</param>
        private string getstream(string filepath)
        {
            //建立文件流对象
            system.io.filestream filestr=new system.io.filestream(filepath,system.io.filemode.open);
            byte[] by=new byte[system.convert.toint32(filestr.length)];
            filestr.read(by,0,by.length);
            filestr.close();
            return(system.convert.tobase64string(by));
        }

        /// <summary>
        /// 发送smtp命令
        /// </summary>    
        private bool sendcommand(string str)
        {
            byte[]  writebuffer;
            if(str==null||str.trim()=="")
            {
                return true;
            }
            logs+=str;
            logs+=(enter+enter);
            htmllog+="<font color=blue>";
            htmllog+=str;
            htmllog+="</font></br>";
            writebuffer = encoding.default.getbytes(str);
            try
            {
                ns.write(writebuffer,0,writebuffer.length);
            }
            catch
            {
                errmsg="网络连接错误";
                return false;
            }
            return true;
        }

        /// <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 + enter + enter;
                htmllog+="<font color=#990000>";
                htmllog+=returnvalue;
                htmllog+="</font></br>";
                return  returnvalue;
            }
        }

        /// <summary>
        /// 与服务器交互,发送一条命令并接收回应。
        /// </summary>
        /// <param name="command">一个要发送的命令</param>
        /// <param name="errstr">如果错误,要反馈的信息</param>
        private bool dialog(string str,string errstr)
        {
            if(str==null||str.trim()=="")
            {
                return true;
            }
            if(sendcommand(str))
            {
                string rr=recvresponse();
                if(rr=="false")
                {
                    return false;
                }
                string rrcode=rr.substring(0,3);
                if(rightcodeht[rrcode]!=null)
                {
                    return true;
                }
                else
                {
                    if(errcodeht[rrcode]!=null)
                    {
                        errmsg+=(rrcode+errcodeht[rrcode].tostring());
                        errmsg+=enter;
                    }
                    else
                    {
                        errmsg+=rr;
                    }
                    errmsg+=errstr;
                    return false;
                }
            }
            else
            {
                return false;
            }

        }

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

        private bool dialog(string[] str,string errstr)
        {
            for(int i=0;i<str.length;i++)
            {
                if(!dialog(str[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[recipientmaxnum];
            for(int i=0;i<recipient.count;i++)
            {

                sendbuffer[i]="rcpt to:<" + recipient[i].tostring() +">" + enter;

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

            sendbufferstr="data" + enter;
            if(!dialog(sendbufferstr,""))
                return false;

            sendbufferstr="from:" + fromname + "<" + from +">" +enter;

            sendbufferstr += "to:=?"+charset.toupper()+"?b?"+base64encode(recipientname)+"?="+"<"+recipient[0]+">"+enter;
            sendbufferstr+="cc:";
            for(int i=0;i<recipient.count;i++)
            {
                sendbufferstr+=recipient[i].tostring() + "<" + recipient[i].tostring() +">,";
            }
            sendbufferstr+=enter;

            if(charset=="")
            {
                sendbufferstr+="subject:" + subject + enter;
            }
            else
            {
                sendbufferstr+="subject:" + "=?" + charset.toupper() + "?b?" + base64encode(subject) +"?=" +enter;
            }

            sendbufferstr+="x-priority:" + priority + enter;
            sendbufferstr+="x-msmail-priority:" + priority + enter;
            sendbufferstr+="importance:" + priority + enter;
            sendbufferstr+="x-mailer: huolx.pubclass" + enter;
            sendbufferstr+="mime-version: 1.0" + enter;

            sendbufferstr += "content-type: multipart/mixed;"+enter;//内容格式和分隔符
            sendbufferstr += "   boundary=\"—-=_nextpart_000_00d6_01c29593.aab31770\""+enter;
            sendbufferstr += "——=_nextpart_000_00d6_01c29593.aab31770"+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+="content-transfer-encoding: base64" + enter + enter;

            sendbufferstr+= base64encode(body) + enter;
            if(attachments.count!=0)
            {
                foreach(string filepath in attachments)
                {
                
                    sendbufferstr += "——=_nextpart_000_00d6_01c29593.aab31770"+enter;
                    sendbufferstr += "content-type: application/octet-stream"+enter;
                    sendbufferstr += "   name=\"=?"+charset.toupper()+"?b?"+base64encode(filepath.substring(filepath.lastindexof("\\")+1))+"?=\""+enter;
                    sendbufferstr += "content-transfer-encoding: base64"+enter;
                    sendbufferstr += "content-disposition: attachment;"+enter;
                    sendbufferstr += "   filename=\"=?"+charset.toupper()+"?b?"+base64encode(filepath.substring(filepath.lastindexof("\\")+1))+"?=\""+enter+enter;
                    sendbufferstr += getstream(filepath)+enter+enter;
                }
            }
            sendbufferstr += "——=_nextpart_000_00d6_01c29593.aab31770–"+enter+enter;
          
          
            sendbufferstr += enter + "." + enter;

            if(!dialog(sendbufferstr,"错误信件信息"))
                return false;

            sendbufferstr="quit" + enter;
            if(!dialog(sendbufferstr,"断开连接时错误"))
                return false;

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

               
    }

}

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 »
分享到: 更多 (0)

相关推荐

  • 暂无文章