检验邮箱是否有效

1、使用TcpClient连接邮箱服务器

需要提供邮件服务器的域名,以及服务端口号

2、发送HELO命令

建立连接之后发送HELO命令,检验指定的服务器端口是否提供SMTP服务

3、验证身份

发送用户名和密码给到邮件服务器,验证身份是否合法

4、发送mail from命令

5、发送rcpt to命令,验证邮箱是否有效

      public static List<string> GetNoValidEmailList(string[] emails)
        {
            var rst = new List<string>();
            var ServerIp = Config.GetValue("ServerHost");
            var Port = int.Parse(Config.GetValue("ServerPort"));
            var mailUserName = Config.GetValue("UserName");
            var mailPwd = "xxxxxx";
            TcpClient client = new TcpClient();
            try
            {
                client.Connect(ServerIp, Port);
                StreamReader sr = new StreamReader(client.GetStream(), Encoding.Default);
                var line = sr.ReadLine();
                if (OperateStream(client, $"helo {MailServerIp}") != "250")
                {
                    Console.WriteLine("HELO命令失败,本端口不提供SMTP服务");
                    return rst;
                }
                var bs = Encoding.Default.GetBytes($"\0{mailUserName}\0{mailPwd}");
                var bs64 = Convert.ToBase64String(bs);
                if (OperateStream(client, $"auth plain {bs64}") != "235")
                {
                    Console.WriteLine("认证失败,用户信息不对");
                    return rst;
                }
                if (OperateStream(client, $"mail from:<{mailUserName}>") != "250")
                {
                    Console.WriteLine("MAIL命令失败,请先验证身份");
                    return rst;
                }
                for (int i = 0; i < emails.Length; i++)
                {
                    if (OperateStream(client, $"rcpt to:<{emails[i]}>") != "250")
                    {
                        rst.Add(emails[i]);
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                OperateStream(client, "QUIT");
            }

            return rst;
        }

        private static string OperateStream(TcpClient client, string cmd)
        {
            cmd = cmd + "\r\n";
            Stream tcpStream = client.GetStream();
            byte[] bws = Encoding.Default.GetBytes(cmd.ToArray());
            tcpStream.Write(bws, 0, bws.Length);
            StreamReader sr = new StreamReader(client.GetStream(), Encoding.Default);
            var line = sr.ReadLine();
            var rst = string.Empty;
            if (!string.IsNullOrEmpty(line) && line.Length >= 3)
                rst = line.Substring(0, 3);
            return rst;
        }

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值