⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smtpmail.cs

📁 smtp收邮件
💻 CS
📖 第 1 页 / 共 2 页
字号:
            }

            /// <summary> 
            /// 添加一组收件人(不超过recipientmaxnum个),参数为字符串数组 
            /// </summary> 
            /// <param name="str">保存有收件人地址的字符串数组(不超过recipientmaxnum个)</param>    
            public bool AddRecipient(string[] str)
            {
                for (int i = 0; i < str.Length; i++)
                {
                    if (!AddRecipient(str[i]))
                    {
                        return false;
                    }
                }
                return true;
            }
            /// <summary> 
            /// 发送SMTP命令 
            /// </summary>    
            private bool SendCommand(string str)
            {
                byte[] WriteBuffer;
                if (str == null || str.Trim() == "")
                {
                    return true;
                }
                logs += str;
                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, 0, ReadBuffer.Length).Substring(0, StreamSize);
                    logs += Returnvalue;
                    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;
               
                SendBuffer = new string[1];
                if (cc != "")
                    SendBuffer[0] = "RCPT TO:<" + cc.ToString() + ">" + enter;

                if (!Dialog(SendBuffer, "抄送人地址有误"))
                    return true;

                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 += cc.ToString() + "<" + cc.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;
            if (Attachments.Count == 0)
            {
                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 + enter;
            }else
            {
                SendBufferstr += "Content-Type:multipart/mixed;" + enter;
                SendBufferstr += "        boundary=\"=====001_Dragon320037612222_=====\""+enter;
                SendBufferstr += "This is a multi-part message in MIME format."+enter+enter;
                SendBufferstr += "--=====001_Dragon320037612222_====="+enter;
                SendBufferstr += "Content-Type:text/plain;" + enter;
                SendBufferstr += "        charset=\"" + Charset.ToLower() + "\"" + enter;
                SendBufferstr += "Content-Transfer-Encoding:base64"+enter+enter;
                SendBufferstr += Base64Encode(Body) + enter + enter;
 
                foreach (string filepath in Attachments)
                {

                    SendBufferstr += "--=====001_Dragon320037612222_=====" + 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 +="--=====001_Dragon320037612222_=====--" + enter + 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 (mailserver.Trim() == "")
                {
                    errmsg = "必须指定SMTP服务器";
                    return false;
                }
                return SendEmail();

            }

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

                MailDomain = smtpserver;
                return Send();
            }

            public string Cc
            {
                set { cc=value ;}
            }
            /// <summary> 
            /// 发送邮件方法 
            /// </summary> 
            /// <param name="smtpserver">smtp服务器信息,如"username:passwordwww.smtpserver.com:25",也可去掉部分次要信息,如www.smtpserver.com"</param> 
            /// <param name="from">发件人mail地址</param> 
            /// <param name="fromname">发件人姓名</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 from, string fromname, string to, string toname,string txtCc, bool html, string subject, string body,string attfile)
            {
                //MailServerUserName = smtpuser;
                //MailServerPassWord = smtppass;
                From = from;
                FromName = fromname;
                AddRecipient(to);
                RecipientName = toname;
                cc = txtCc;
                if (attfile !="")
                    AddAttachment(attfile);
                Html = html;
                Subject = subject;
                Body = body;
                return Send();
            }
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -