国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專(zhuān)題視頻專(zhuān)題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專(zhuān)題1關(guān)鍵字專(zhuān)題50關(guān)鍵字專(zhuān)題500關(guān)鍵字專(zhuān)題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專(zhuān)題關(guān)鍵字專(zhuān)題tag2tag3文章專(zhuān)題文章專(zhuān)題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專(zhuān)題3
問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

VB.NET驗(yàn)證郵件地址的合法性實(shí)現(xiàn)代碼

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:42:51
文檔

VB.NET驗(yàn)證郵件地址的合法性實(shí)現(xiàn)代碼

VB.NET驗(yàn)證郵件地址的合法性實(shí)現(xiàn)代碼:一、提出問(wèn)題 現(xiàn)在,對(duì)于用戶在Web頁(yè)面上或電話中給出的Email地址,我們?cè)絹?lái)越不敢肯定它是否真的有效。在今天這個(gè)垃圾郵件泛濫成災(zāi)的年代,人們完全有理由舍不得輕易透露Email地址。 另一方面,對(duì)于通過(guò)正規(guī)途徑得到的郵件地址,當(dāng)我們將它用于合法的目的時(shí)
推薦度:
導(dǎo)讀VB.NET驗(yàn)證郵件地址的合法性實(shí)現(xiàn)代碼:一、提出問(wèn)題 現(xiàn)在,對(duì)于用戶在Web頁(yè)面上或電話中給出的Email地址,我們?cè)絹?lái)越不敢肯定它是否真的有效。在今天這個(gè)垃圾郵件泛濫成災(zāi)的年代,人們完全有理由舍不得輕易透露Email地址。 另一方面,對(duì)于通過(guò)正規(guī)途徑得到的郵件地址,當(dāng)我們將它用于合法的目的時(shí)

一、提出問(wèn)題
  現(xiàn)在,對(duì)于用戶在Web頁(yè)面上或電話中給出的Email地址,我們?cè)絹?lái)越不敢肯定它是否真的有效。在今天這個(gè)垃圾郵件泛濫成災(zāi)的年代,人們完全有理由舍不得輕易透露Email地址。
  
  另一方面,對(duì)于通過(guò)正規(guī)途徑得到的郵件地址,當(dāng)我們將它用于合法的目的時(shí),也常常要為郵件地址是否有效而煩惱,用戶可能有意或無(wú)意地寫(xiě)錯(cuò)地址,也可能由于長(zhǎng)時(shí)間不訪問(wèn)而導(dǎo)致郵箱失效。對(duì)于少量的郵件地址,也許可以手工驗(yàn)證其合法性,例如發(fā)送測(cè)試email;但是,當(dāng)郵件地址的數(shù)量達(dá)到數(shù)萬(wàn)甚至更多時(shí),手工驗(yàn)證就不可能了,必須用專(zhuān)門(mén)的工具或自己編寫(xiě)程序自動(dòng)執(zhí)行驗(yàn)證。
  
  常規(guī)的驗(yàn)證方法只從email地址的格式判斷其合法性,例如檢查它是否包含“@”和“.”符號(hào)。顯然,這種檢查是不充分的,郵件地址格式正確并不證明它一定有效。由于這個(gè)原因,一些網(wǎng)站采取了用email發(fā)送密碼、特殊資源的URL等辦法,或者要求用戶回復(fù)email,以此確保email地址的有效性。但是,這些辦法不見(jiàn)得任何時(shí)候都有效,例如,你可能不是從自己的網(wǎng)站上收集用戶email,而是通過(guò)第三者獲得。
  
  考慮到這些原因,驗(yàn)證email地址合法性最根本的辦法是查詢郵件服務(wù)器。本文將給出完成這一任務(wù)的完整VB.NET代碼。
  
  二、郵件服務(wù)器之合法性
  對(duì)于任何郵件地址,判斷其合法性的第一步當(dāng)然是看看它的格式是否正確,例如是否包含“@”和“.”符號(hào),這方面的資料很多,甚至還有現(xiàn)成的控件,所以本文不再贅述。我們的任務(wù)從判斷郵件地址的域是否合法開(kāi)始,例如對(duì)于abc@sina.com.cn這個(gè)地址,首先判斷sina.com.cn的郵件服務(wù)器是否有效。
  
  每一個(gè)域有一個(gè)MX記錄,即郵件交換器(Mail Exchanger)記錄,它指向該域內(nèi)處理email的服務(wù)器,我們只要查詢DNS服務(wù)器即可獲得該信息。Windows本身帶來(lái)的nslookup命令非常適合于完成該任務(wù),例如,要查找sina.com.cn的郵件服務(wù)器,只需執(zhí)行nslookup -type=mx sina.com.cn,其中-type=MX表示要查找MX記錄,輸出結(jié)果如圖一所示。Windows的nslookup命令要安裝了TCP/IP協(xié)議后才可用,詳細(xì)說(shuō)明可參見(jiàn)Windows幫助。
  
 

  下面的GetMailServer函數(shù)封裝了調(diào)用Windows nslookup命令的操作,根據(jù)參數(shù)中指定的域名返回郵件服務(wù)器。
  
  Private Function GetMailServer(ByVal sDomain As String) As String
  Dim info As New ProcessStartInfo()
  Dim ns As Process
  '調(diào)用Windows的nslookup命令,查找郵件服務(wù)器
  info.UseShellExecute = False
  info.RedirectStandardInput = True
  info.RedirectStandardOutput = True
  info.FileName = "nslookup"
  info.CreateNoWindow = True
  '查找類(lèi)型為MX。關(guān)于nslookup的詳細(xì)說(shuō)明,請(qǐng)參見(jiàn)
  'Windows幫助
  info.Arguments = "-type=MX " + sDomain.ToUpper.Trim
  '啟動(dòng)一個(gè)進(jìn)行執(zhí)行Windows的nslookup命令()
  ns = Process.Start(info)
  Dim sout As StreamReader
  sout = ns.StandardOutput
  ' 利用正則表達(dá)式找出nslookup命令輸出結(jié)果中的郵件服務(wù)器信息
  Dim reg As Regex = New Regex("mail exchanger = (?[^\\\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
  
  三、郵件地址之合法性
  只要郵件地址中指定的域合法,我們就可以連接郵件服務(wù)器,試著發(fā)送一個(gè)email。如果郵件服務(wù)器回答說(shuō)該用戶非法或不存在,表明郵件地址無(wú)效。這一步的主要操作包括創(chuàng)建一個(gè)連接郵件服務(wù)器的Socket,然后按照SMTP郵件傳輸協(xié)議的要求與服務(wù)器通信,完成郵件發(fā)送操作。關(guān)于SMTP協(xié)議的詳細(xì)說(shuō)明,有興趣的讀者可參見(jiàn)SMTP規(guī)范(RFC 821):http://www.ietf.org/rfc/rfc821.txt。
  
  下面CheckEmail函數(shù)的輸入?yún)?shù)是一個(gè)郵件地址,函數(shù)的返回值表示該地址是否合法。該函數(shù)有兩個(gè)數(shù)值可隨意調(diào)整:在發(fā)送郵件的過(guò)程中,我們要向?qū)Ψ降泥]件服務(wù)器提供一個(gè)合法的域名以表明自己的身份,這里選擇的是sina.com.cn;根據(jù)網(wǎng)絡(luò)和對(duì)方郵件服務(wù)器的忙閑程度,響應(yīng)時(shí)間也會(huì)發(fā)生變化,這里選擇的等待時(shí)間是3秒。當(dāng)網(wǎng)絡(luò)或?qū)Ψ椒?wù)器非常忙時(shí),減小等待時(shí)間會(huì)增加測(cè)試失敗的可能性。
  
  Public Function CheckEmail(ByVal sEmail As String) As Long
  
  Dim oStream As NetworkStream
  Dim sFrom As String '發(fā)件人
  Dim sTo As String '收件人
  Dim sResponse As String '郵件服務(wù)器的應(yīng)答
  Dim Remote_Addr As String '發(fā)件人的域名
  Dim mserver As String '郵件服務(wù)器
  Dim sText As String()
  
  sTo = "<" + sEmail + ">"
  ' 從郵件地址分離出帳戶名和域名
  sText = sEmail.Split(CType("@", Char))
  ' 查找該域的郵件服務(wù)器
  mserver = GetMailServer(sText(1))
  'mserver為空值表明查找郵件服務(wù)器失敗
  If mserver = "" Then
  Return 4
  Exit Function
  End If
  '發(fā)件人地址的域名必須合法
  Remote_Addr = "sina.com.cn"
  sFrom = "  '盡可能延遲創(chuàng)建對(duì)象的時(shí)間
  Dim oConnection As New TcpClient()
  Try
  '超時(shí)時(shí)間
  oConnection.SendTimeout = 3000
  '連接SMTP端口
  oConnection.Connect(mserver, 25)
  '收集郵件服務(wù)器的應(yīng)答信息
  oStream = oConnection.GetStream()
  sResponse = GetData(oStream)
  sResponse = SendData(oStream, "HELO " & Remote_Addr & vbCrLf)
  sResponse = SendData(oStream, "MAIL FROM: " & sFrom & vbCrLf)
  '如果對(duì)MAIL FROM指令有肯定的應(yīng)答,
  '至少表明郵件地址的域名正確
  If ValidResponse(sResponse) Then
  sResponse = SendData(oStream, "RCPT TO: " & sTo & vbCrLf)
  '如果對(duì)RCPT TO指令有肯定的應(yīng)答
  '表明郵件服務(wù)器已認(rèn)可該地址
  If ValidResponse(sResponse) Then
  Return 1 '郵件地址有效
  Else
  Return 2 '只有域名有效
  End If
  End If
  '結(jié)束與郵件服務(wù)器的會(huì)話
  SendData(oStream, "QUIT" & vbCrLf)
  oConnection.Close()
  oStream = Nothing
  Catch
  Return 3 '錯(cuò)誤!
  End Try
  End Function
  
  '獲取服務(wù)器應(yīng)答數(shù)據(jù),并將其轉(zhuǎn)換為String
  Private Function GetData(ByRef oStream As NetworkStream) As String
  
  Dim bResponse(1024) As Byte
  Dim sResponse As String
  
  Dim lenStream As Integer = oStream.Read(bResponse, 0, 1024)
  If lenStream > 0 Then
  sResponse = Encoding.ASCII.GetString(bResponse, 0, 1024)
  End If
  Return sResponse
  End Function
  '向郵件服務(wù)器發(fā)送數(shù)據(jù)
  Private Function SendData(ByRef oStream As NetworkStream, ByVal sToSend As String) As String
  Dim sResponse As String
  '將String轉(zhuǎn)換成Byte數(shù)組
  Dim bArray() As Byte = Encoding.ASCII.GetBytes(sToSend.ToCharArray)
  '發(fā)送數(shù)據(jù)
  oStream.Write(bArray, 0, bArray.Length())
  sResponse = GetData(oStream)
  '返回應(yīng)答
  Return sResponse
  End Function
  
  '服務(wù)器是否返回肯定的回答?
  Private Function ValidResponse(ByVal sResult As String) As Boolean
  Dim bResult As Boolean
  Dim iFirst As Integer
  If sResult.Length > 1 Then
  iFirst = CType(sResult.Substring(0, 1), Integer)
  '如果服務(wù)器返回應(yīng)答的第一個(gè)字符小于'3'
  '我們認(rèn)為服務(wù)器已認(rèn)可剛才的操作
  If iFirst < 3 Then bResult = True
  End If
  Return bResult
  End Function
  
  CheckEmail函數(shù)的返回值表示測(cè)試結(jié)果:1表示郵件地址合法,2表示只有域名正確(可能是用戶的郵件帳戶無(wú)效),3表示出現(xiàn)了錯(cuò)誤,4表示無(wú)法找到郵件服務(wù)器。
  
  四、用戶界面
  以上我們完成了測(cè)試郵件地址是否合法的核心功能,這些函數(shù)可用于各種形式的應(yīng)用程序,包括Web服務(wù)、Windows應(yīng)用程序、控件等,最多只要修改一下聲明方式。為便于測(cè)試這些函數(shù),下面我們要做一個(gè)Windows應(yīng)用形式的簡(jiǎn)單用戶界面。
  
  啟動(dòng)VS.NET,選擇新建Visual Basic項(xiàng)目、Windows應(yīng)用程序,如圖二,輸入項(xiàng)目名稱(chēng)CheckMail以及保存位置,點(diǎn)擊“確定”按鈕,VS.NET創(chuàng)建一個(gè)新的項(xiàng)目。
  
 

  從工具箱把一個(gè)文本標(biāo)簽、一個(gè)輸入框和一個(gè)按鈕拖到VS.NET自動(dòng)創(chuàng)建的窗體上。將窗體的TEXT屬性改為“Email地址測(cè)試”,文本標(biāo)簽的TEXT屬性改為“郵件地址”,按鈕的TEXT屬性改為“Check!”,調(diào)整各個(gè)控件的位置,使其看起來(lái)整齊美觀,如圖三。
  
 

  雙擊按鈕,輸入點(diǎn)擊按鈕時(shí)執(zhí)行的Button1_Cli

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

VB.NET驗(yàn)證郵件地址的合法性實(shí)現(xiàn)代碼

VB.NET驗(yàn)證郵件地址的合法性實(shí)現(xiàn)代碼:一、提出問(wèn)題 現(xiàn)在,對(duì)于用戶在Web頁(yè)面上或電話中給出的Email地址,我們?cè)絹?lái)越不敢肯定它是否真的有效。在今天這個(gè)垃圾郵件泛濫成災(zāi)的年代,人們完全有理由舍不得輕易透露Email地址。 另一方面,對(duì)于通過(guò)正規(guī)途徑得到的郵件地址,當(dāng)我們將它用于合法的目的時(shí)
推薦度:
標(biāo)簽: 地址 郵件 驗(yàn)證
  • 熱門(mén)焦點(diǎn)

最新推薦

猜你喜歡

熱門(mén)推薦

專(zhuān)題
Top
主站蜘蛛池模板: 国产成人精品一区二三区 | 91系列在线观看免费 | 精品久久久久久久一区二区手机版 | 亚洲欧美网 | 欧美一级色图 | 精品免费久久久久国产一区 | 国产在线视频网 | 欧美日本一区二区三区 | 中文字幕有码在线观看 | 国产精品久久久久久久久久久不卡 | 精品一区二区三区在线视频 | 欧美日韩国产成人精品 | 欧美另类网 | 日韩欧美伊人久久大香线蕉 | 国产美女白丝袜精品_a不卡 | 91午夜精品亚洲一区二区三区 | 99久久精品国产国产毛片 | 午夜欧美视频 | 一区二区不卡久久精品 | 不卡一级aaa全黄毛片 | 欧美日韩中文字幕在线 | 免费国产精品视频 | 亚洲一区中文字幕 | 制服丝袜中文在线 | 亚洲午夜久久久久久久久电影网 | 国产精品视频久久久久久 | 国产高清自拍 | 日日碰日日摸日日澡视频播放 | 久久精品美女 | 国产在线视频在线观看 | a免费国产一级特黄aa大 | 在线观看亚洲欧美 | 国内偷拍第一页 | 中文字幕版免费电影网站 | 国产麻豆精品免费密入口 | 国产成人成人一区二区 | 免费观看日韩大尺码观看 | 国产成人久久精品一区二区三区 | 亚洲欧洲精品成人久久曰 | 久久综合中文字幕一区二区 | 插插插叉叉叉 |