访问 http://www.qqread.com/vbdotnet/i862137000.html 一、提出问题
现在,对于用户在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命令的操作,根据参数中指定的域名返回邮件服务器。
更多内容请看Java编程开发手册、.NET移动与嵌入式技术、.NET开发手册专题,或进入讨论组讨论。
现在,对于用户在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 |
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
相关专题
- Java编程开发手册 (8276篇文章)
- .NET移动与嵌入式技术 (5950篇文章)
- .NET开发手册 (5652篇文章)
- 邮件服务器专题 (7210篇文章)
- VB网络及通讯编程 (278篇文章)
- vb.net入门——ToolBar 控件的使用 (267次浏览)
- vb.net入门——OpenFileDialog 组件的使用 (75次浏览)
- vb.net入门——FontDialog 组件的使用 (52次浏览)
- vb.net用Graphics画一个五角星 (46次浏览)
- vb.net入门——FolderBrowserDialog 组件的使 (45次浏览)
- vb.net绘制干扰点 (44次浏览)
- vb.net入门——ColorDialog 组件的使用 (41次浏览)
- vb.net巧用ToolTip控件获取鼠标坐标 (39次浏览)
- 用vb.net创建一个鼠标绘图程序 (39次浏览)
- vb.net入门——SaveFileDialog 组件的使用 (38次浏览)



