验证邮箱是否真实存在 c#

来源:互联网 发布:淘宝卖家代销流程图 编辑:程序博客网 时间:2024/04/30 00:09
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Net.Sockets;using System.Text.RegularExpressions;using System.IO;using System.Diagnostics;namespace WindowsFormsApplication2{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        TcpClient tcpc;        NetworkStream s;        string strDomain;        byte[] bb;        int len;        string read;        string stringTosend;        byte[] arrayToSend;        bool flag;        int count = 0;         public string getMailServer(string strEmail, bool IsCheck)        {            strDomain = strEmail.Split('@')[1];            if (IsCheck == true)                this.textBoxShow.Text += "分离出邮箱域名:" + strDomain + "\r\n";            ProcessStartInfo info = new ProcessStartInfo();   //指定启动进程时使用的一组值。            info.UseShellExecute = false;            info.RedirectStandardInput = true;            info.RedirectStandardOutput = true;            info.FileName = "nslookup";            info.CreateNoWindow = true;            info.Arguments = "-type=mx " + strDomain;            Process ns = Process.Start(info);        //提供对本地和远程进程的访问并使您能够启动和停止本地系统进程。            StreamReader sout = ns.StandardOutput;            Regex reg = new Regex(@"mail exchanger = (?<mailServer>[^\s]+)");            string strResponse = "";            while ((strResponse = sout.ReadLine()) != null)            {                Match amatch = reg.Match(strResponse);   // Match  表示单个正则表达式匹配的结果。                if (reg.Match(strResponse).Success)                {                    return amatch.Groups["mailServer"].Value;   //获取由正则表达式匹配的组的集合                }            }            return null;        }        private void Connect(string mailServer)        {            try            {                tcpc.Connect(mailServer, 25);                s = tcpc.GetStream();                len = s.Read(bb, 0, bb.Length);                read = Encoding.UTF8.GetString(bb);                if (read.StartsWith("220") == true)                    this.textBoxShow.Text += "连接服务器成功!" + "\r\n";            }            catch (Exception e)            {                MessageBox.Show(e.ToString());            }        }        private bool SendCommand(string command)        {            try            {                arrayToSend = Encoding.UTF8.GetBytes(command.ToCharArray());                s.Write(arrayToSend, 0, arrayToSend.Length);                len = s.Read(bb, 0, bb.Length);                read = Encoding.UTF8.GetString(bb);                this.textBoxShow.Text += "收到:" + read.Substring(0, len) + "\r\n";            }            catch (IOException e)            {                MessageBox.Show(e.ToString());            }            if (read.StartsWith("250"))                return true;            else                return false;        }        public void checkEmail(string mailAddress)        {            Regex reg = new Regex(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*");            if (!reg.IsMatch(mailAddress))            {                this.textBoxShow.Text += "Email地址形式上就不对" + "\r\n";                return;            }//Email地址形式上就不对            string mailServer = getMailServer(mailAddress, true);            if (mailServer == null)            {                this.textBoxShow.Text += "邮件服务器不存在!" + "\r\n";                return;                //邮件服务器探测错误            }            this.textBoxShow.Text += "解析出域名" + strDomain + "的mx记录:" + mailServer + "\r\n";            tcpc = new TcpClient();      //为 TCP 网络服务提供客户端连接。            tcpc.NoDelay = true;            tcpc.ReceiveTimeout = 3000;            tcpc.SendTimeout = 3000;            bb = new byte[512];            try            {                Connect(mailServer);//创建连接                stringTosend = "helo " + mailServer + "\r\n"; ////写入HELO命令                this.textBoxShow.Text += "发送:" + stringTosend;                flag = SendCommand(stringTosend);                if (flag == false)                {                    //timer1.Enabled = false;                    return;                }                stringTosend = "mail from:<" + mailAddress + ">" + "\r\n"; ////写入Mail From命令                this.textBoxShow.Text += "发送:" + stringTosend;                flag = SendCommand(stringTosend);                if (flag == false)                {                    return;                }                stringTosend = "rcpt to:<" + mailAddress + ">" + "\r\n";//写入RCPT命令,这是关键的一步,后面的参数便是查询的Email的地址                this.textBoxShow.Text += "发送:" + stringTosend;                flag = SendCommand(stringTosend);                if (flag == true)                {                    //邮箱存在                }                else                {                    //邮箱不存在                }            }            catch (Exception ee)            {                MessageBox.Show(ee.ToString());   //发生错误或邮件服务器不可达            }        }        private void button1_Click(object sender, EventArgs e)        {            checkEmail("wangzh300@163.com");        }    }}

原创粉丝点击