工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛
您的位置:软件 > 开发者网络 > 微软开发专栏 > Visual Studio.net专栏 > VB.net > 正文
VB.NET编程验证邮件地址的合法性
[文章信息]
作者:俞伟明编译
时间:2004-06-18
出处:yesky
责任编辑:方舟
[文章导读]
对于用户在Web页面上或电话中给出的Email地址,我们越来越不敢肯定它是否真的有效
advertisement
热点推荐
· 在VB6中用命令行为模式控制GUI动作
· Excel图表向导详解
· 浅析各种计算机病毒应对方法
· 2月16日软件精选 春节文章精彩回顾
· 轻松玩转Excel数据图表
[正文]

1 2  下一页

  一、提出问题
  
  现在,对于用户在Web页面上或电话中给出的Email地址,我们越来越不敢肯定它是否真的有效。在今天这个垃圾邮件泛滥成灾的年代,人们完全有理由舍不得轻易透露Email地址。

  另一方面,对于通过正规途径得到的邮件地址,当我们将它用于合法的目的时,也常常要为邮件地址是否有效而烦恼,用户可能有意或无意地写错地址,也可能由于长时间不访问而导致邮箱失效。对于少量的邮件地址,也许可以手工验证其合法性,例如发送测试email;但是,当邮件地址的数量达到数万甚至更多时,手工验证就不可能了,必须用专门的工具或自己编写程序自动执行验证。

  常规的验证方法只从email地址的格式判断其合法性,例如检查它是否包含“@”和“.”符号。显然,这种检查是不充分的,邮件地址格式正确并不证明它一定有效。由于这个原因,一些网站采取了用email发送密码、特殊资源的URL等办法,或者要求用户回复email,以此确保email地址的有效性。但是,这些办法不见得任何时候都有效,例如,你可能不是从自己的网站上收集用户email,而是通过第三者获得。

  考虑到这些原因,验证email地址合法性最根本的办法是查询邮件服务器。本文将给出完成这一任务的完整VB.NET代码。

  二、邮件服务器之合法性

  对于任何邮件地址,判断其合法性的第一步当然是看看它的格式是否正确,例如是否包含“@”和“.”符号,这方面的资料很多,甚至还有现成的控件,所以本文不再赘述。我们的任务从判断邮件地址的域是否合法开始,例如对于abc@sina.com.cn这个地址,首先判断sina.com.cn的邮件服务器是否有效。

  每一个域有一个MX记录,即邮件交换器(Mail Exchanger)记录,它指向该域内处理email的服务器,我们只要查询DNS服务器即可获得该信息。Windows本身带来的nslookup命令非常适合于完成该任务,例如,要查找sina.com.cn的邮件服务器,只需执行nslookup -type=mx sina.com.cn,其中-type=MX表示要查找MX记录,输出结果如图一所示。Windows的nslookup命令要安装了TCP/IP协议后才可用,详细说明可参见Windows帮助。


图一

  下面的GetMailServer函数封装了调用Windows nslookup命令的操作,根据参数中指定的域名返回邮件服务器。

Private Function GetMailServer(ByVal sDomain As String) As String
 Dim info As New ProcessStartInfo()
 Dim ns As Process
 '调用Windows的nslookup命令,查找邮件服务器
 info.UseShellExecute = False
 info.RedirectStandardInput = True
 info.RedirectStandardOutput = True
 info.FileName = "nslookup"
 info.CreateNoWindow = True
 '查找类型为MX。关于nslookup的详细说明,请参见
 'Windows帮助
 info.Arguments = "-type=MX " + sDomain.ToUpper.Trim
 '启动一个进行执行Windows的nslookup命令()
 ns = Process.Start(info)
 Dim sout As StreamReader
 sout = ns.StandardOutput
 ' 利用正则表达式找出nslookup命令输出结果中的邮件服务器信息
 Dim reg As Regex = New Regex("mail exchanger = (?<server>[^\\\s]+)")
 Dim mailserver As String
 Dim response As String = ""
 Do While (sout.Peek() > -1)
  response = sout.ReadLine()
  Dim amatch As Match = reg.Match(response)
  If (amatch.Success) Then
   mailserver = amatch.Groups("server").Value
   Exit Do
  End If
 Loop
 Return mailserver
End Function


1 2  下一页

天极社区邀请您:写博客日记  上传相片   论坛聊天  订阅电子杂志  推荐网摘   免费图铃工具
笔名:   请您注意:

 遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

 天极网拥有管理笔名和留言的一切权利。
评论:
 
发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容焦点新闻
  • VB.NET中多窗体同步的解决方案
  • VB.NET时间日期数据处理及技巧
  • 实战Visual Basic.Net对话框
  • 深入浅出VB.NET提示对话框
  • VB.Net编程入门之Hello World
  • 国信办督战八大行业灾难备份 将出台国家标准
  • 中国IT企业走进欧盟 搭第六框架计划直通车
  • 美邦银行用户注意 警惕新型“钓鱼”邮件
  • 微软三年时间磨出新IE 具有更强大安全性能
  • 高清碟机标准打内战 HDV将状告EVD恶性竞争
  • 正版网上银行为何不安全 客户泄密银行无责任
  • 惠普铁娘子悲壮退场 未能成功扮演拯救者
  • 网上乱用人民币图样是违规行为 最高罚3万
  • Advertisement

    天极无线


    奇妙科幻|美好风光|清风车影|漫画卡通|星座生肖|明星写真|动物世界
    老鼠爱大米
    挥着翅膀的女孩
    女人味
    栀子花开
    白月光
    刚刚好
    江南
    快乐崇拜
    亲爱的你怎么不在我身边
    小薇
    2002年的第一场雪
    有多少爱可以重来
    我的地盘
    七里香
    情人
     
    老鼠爱大米 老板电话
    冲动的惩罚 七里香
    我不是黄蓉 女生撒娇
    盛夏的果实 坚持到底
    孤单北半球 眉飞色舞
    挪威的森林 可爱女人
    最浪漫的事 老板电话

    CSEEK搜索