1.检测邮箱格式 2.获取邮箱的服务地址 3.创建链接 4.发送helo命令 5.写入from 和 to
public int CheckEmailAndReturnCode(string mailAddress,out string Errstr)
{
Errstr = "";
List<string> Result = new List<string>();
Regex reg = new Regex(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*");
if (!reg.IsMatch(mailAddress))
{
return 2;
//return "Email地址形式上就不对";
}
string mailServer = getMailServer(mailAddress);
if (mailServer == null)
{
return 3;
//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)
{
return 4;
////timer1.Enabled = false;
//return "写入HELO命令失败";
}
stringTosend = "mail from:<webmaster@aol.com>" + "\r\n";
//this.textBoxShow.Text += "发送:" + stringTosend;
flag = SendCommand(stringTosend);
if (flag == false)
{
return 5;
//return "写入Mail From命令";
}
stringTosend = "rcpt to:<" + mailAddress + ">" + "\r\n";//写入RCPT命令,这是关键的一步,后面的参数便是查询的Email的地址
//this.textBoxShow.Text += "发送:" + stringTosend;
flag = SendCommand(stringTosend);
if (flag == true)
{
//邮箱存在
return 1;
//return "邮箱存在";
}
else
{
return 6;
//邮箱不存在
//return "邮箱不存在";
}
}
catch (Exception ee)
{
Errstr = ee.Message;
//MessageBox.Show(ee.ToString()); //发生错误或邮件服务器不可达
return 7;
}
}
public string getMailServer(string strEmail)
{
string strDomain = strEmail.Split('@')[1];
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);
if (reg.Match(strResponse).Success) return amatch.Groups["mailServer"].Value;
}
return null;
}
private bool SendCommand(string command)
{
string read01 = "";
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);
//read01 = Encoding.Default.GetString(bb, 0, len);
//this.textBoxShow.Text += "收到:" + read.Substring(0, len) + "\r\n";
}
catch (IOException e)
{
return false; //MessageBox.Show(e.ToString()); //MessageBox.Show(e.ToString());
}
if (read.StartsWith("250"))
{
return true;
}
else
{
return false;
}
}