Email地址有效性验证

作者:网络 来源:佚名 更新时间:2008-02-05 18:18:25 点击:
国内最大的酷站演示中心!
email地址有效性的检验是一个经常遇到的问题啦!一般的检验方法是对email地址字符串进行简单的检验,如是否含有@ .等有效字符等。这种方法只能保证该地址从格式上看似有效,并不能保证地址可达。最近进行大量的地址校验,写了一个小程序,可以保证email地址真正可达。


public bool checkemail(string mailaddress)
{
tcpclient tcpc=new tcpclient();
try{
string server=mailaddress.split('@')[1];
tcpc.connect(server,25);
networkstream s=tcpc.getstream();
streamreader sr=new streamreader(s,encoding.default);
string strr="";
strr=sr.readline();
if(!strr.startswith("220")) return false;
streamwriter sw=new streamwriter(s,encoding.default);
sw.writeline("helo");
sw.flush();
strr=sr.readline();
if(!strr.startswith("250")) return false;

sw.writeline("mail from;[email protected]");
sw.flush();
strr=sr.readline();
if(!strr.startswith("250")) return false;

sw.writeline("rcpt to:"+mailaddress);
sw.flush();
strr=sr.readline();
if(!strr.startswith("250")) return false;

sw.writeline("quit");
sw.flush();
strr=sr.readline();
return true;

}catch(exception ee)
{
return false;
}
}


这个程序是根据smtp的基本过程实现的。与一个mail服务器连接发邮件的基本过程可能是这样的:

telnet mail.brookes.com 25
>>220 brookes.com<imail 8.02>
helo
>>250 mail.brookes.com
mail from:[email protected]
>>250 ok
rcpt to:[email protected]
>>250 ok its for [email protected]
data
>>ok.send it ;end with <crlf>.<crlf>
soem data.
>>250 message queued
quit
>>221 goodbye.