|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我也不知道,我原来理解的,NET就是C++编程,只是与JAVA相对,呵呵。以为.ET就是高级C++编程。1、提出成绩
如今,关于用户在Web页面上或德律风中给出的Email地点,我们愈来愈不敢一定它是不是真的无效。在明天这个渣滓邮件众多成灾的年月,人们完整有来由舍不得容易泄漏Email地点。
另外一方面,关于经由过程正轨路子失掉的邮件地点,当我们将它用于正当的目标时,也经常要为邮件地点是不是无效而懊恼,用户大概成心或偶然地写错地点,也大概因为长工夫不会见而招致邮箱生效。关于大批的邮件地点,大概能够手工考证其正当性,比方发送测试email;可是,当邮件地点的数目到达数万乃至更多时,手工考证就不成能了,必需用专门的工具或本人编写程序主动实行考证。
惯例的考证办法只从email地点的格局判别其正当性,比方反省它是不是包括“@”和“.”标记。明显,这类反省是不充实的,邮件地点格局准确其实不证实它必定无效。因为这个缘故原由,一些网站接纳了用email发送暗码、特别资本的URL等举措,大概请求用户复兴email,以此确保email地点的无效性。可是,这些举措不见得任什么时候候都无效,比方,你大概不是从本人的网站上搜集用户email,而是经由过程圈外人取得。
思索到这些缘故原由,考证email地点正当性最基本的举措是查询邮件服务器。本文将给出完成这一义务的完全VB.NET代码。
2、邮件服务器之正当性
关于任何邮件地点,判别其正当性的第一步固然是看看它的格局是不是准确,比方是不是包括“@”和“.”标记,这方面的材料良多,乃至另有现成的控件,以是本文不再赘述。我们的义务从判别邮件地点的域是不是正当入手下手,比方关于abc@sina.com.cn这个地点,起首判别sina.com.cn的邮件服务器是不是无效。
每个域有一个MX纪录,即邮件互换器(MailExchanger)纪录,它指向该域内处置email的服务器,我们只需查询DNS服务器便可取得该信息。Windows自己带来的nslookup命令十分合适于完成该义务,比方,要查找sina.com.cn的邮件服务器,只需实行nslookup-type=mxsina.com.cn,个中-type=MX暗示要查找MX纪录,输入了局如图一所示。Windows的nslookup命令要安装了TCP/IP协定后才可用,具体申明可拜见Windows匡助。
上面的GetMailServer函数封装了挪用Windowsnslookup命令的操纵,依据参数中指定的域名前往邮件服务器。
PrivateFunctionGetMailServer(ByValsDomainAsString)AsString
DiminfoAsNewProcessStartInfo()
DimnsAsProcess
"挪用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)
DimsoutAsStreamReader
sout=ns.StandardOutput
"使用正则表达式找出nslookup命令输入了局中的邮件服务器信息
DimregAsRegex=NewRegex("mailexchanger=(?[^s]+)")
DimmailserverAsString
DimresponseAsString=""
DoWhile(sout.Peek()>-1)
response=sout.ReadLine()
DimamatchAsMatch=reg.Match(response)
If(amatch.Success)Then
mailserver=amatch.Groups("server").Value
ExitDo
EndIf
Loop
Returnmailserver
EndFunction
3、邮件地点之正当性
只需邮件地点中指定的域正当,我们就能够毗连邮件服务器,试着发送一个email。假如邮件服务器回覆说该用户不法或不存在,标明邮件地点有效。这一步的次要操纵包含创立一个毗连邮件服务器的Socket,然后依照SMTP邮件传输协定的请求与服务器通讯,完成邮件发送操纵。关于SMTP协定的具体申明,有乐趣的读者可拜见SMTP标准(RFC821):http://www.ietf.org/rfc/rfc821.txt。
上面CheckEmail函数的输出参数是一个邮件地点,函数的前往值暗示该地点是不是正当。该函数有两个数值可随便调剂:在发送邮件的过程当中,我们要向对方的邮件服务器供应一个正当的域名以标明本人的身份,这里选择的是sina.com.cn;依据收集和对方邮件服务器的忙闲水平,呼应工夫也会产生变更,这里选择的守候工夫是3秒。当收集或对方服务器十分忙时,减小守候工夫会增添测试失利的大概性。
PublicFunctionCheckEmail(ByValsEmailAsString)AsLong
DimoStreamAsNetworkStream
DimsFromAsString"发件人
DimsToAsString"收件人
DimsResponseAsString"邮件服务器的应对
DimRemote_AddrAsString"发件人的域名
DimmserverAsString"邮件服务器
DimsTextAsString()
sTo="<"+sEmail+">"
"从邮件地点分别出帐户名和域名
sText=sEmail.Split(CType("@",Char))
"查找该域的邮件服务器
mserver=GetMailServer(sText(1))
"mserver为空值标明查找邮件服务器失利
Ifmserver=""Then
Return4
ExitFunction
EndIf
"发件人地点的域名必需正当
Remote_Addr="sina.com.cn"
sFrom=" |
|