跳至內容

編碼食譜/驗證電子郵件地址

來自華夏公益教科書

正則表示式?

[編輯 | 編輯原始碼]

有很多很多提出的正則表示式解決方案來解決這個問題,但是電子郵件地址格式 如此複雜,以至於僅用正則表示式很難做到。另一方面,大多數人實際使用的電子郵件地址都屬於標準的一個小子集,因此可以在網際網路上廣泛地找到各種可用正則表示式,其準確性各不相同。如果你想看看一個執行電子郵件驗證過程子集的酷炫正則表示式,請仔細觀察這個;這裡還有一些快速但不完全完美的解決方案這裡

實用解決方案

[編輯 | 編輯原始碼]

由於解析電子郵件地址非常困難,因此甚至嘗試解析也沒有意義;特別是對於某人來說,提供一個格式正確但仍然無法工作的電子郵件地址將是微不足道的。這意味著檢測電子郵件地址是否有效的最佳方法是簡單地向其傳送一封電子郵件。如果你能夠驗證電子郵件是否已收到,那麼你就可以確定電子郵件地址是有效的(儘管它不能保證在任何時間段內都有效,因為許多服務都提供臨時電子郵件地址)。

最常見的方法是向某人傳送一封電子郵件,其中包含指向具有長隨機字串附加的 http 服務的連結,只有電子郵件和你的伺服器包含隨機金鑰,因此某人必須閱讀電子郵件才能找到正確的連結。

隨機字串的目的是減少某人可以讓伺服器相信電子郵件地址存在,而實際上它不存在的可能性。例如,假設電子郵件中傳送的連結形式為 http://myserver.com/validateemail?address=example@yourserver.com。某人可以使用現有的有效電子郵件地址檢視模式,並隨後使用任何隨機電子郵件地址呼叫伺服器,即使沒有收到包含連結的實際郵件。

某些伺服器在開啟連結時需要身份驗證。例如,聲稱電子郵件地址的使用者必須在驗證時提供其使用者 ID 和密碼。雖然這對於驗證頁面上顯示的資料的機密性(包括地址已被驗證為現有地址的宣告)很有用,但它不能防止註冊不存在的地址。只有上面描述的長期隨機字串才能做到這一點。

還要注意,字串必須僅從客戶端的角度來看是隨機的,不一定從伺服器的角度來看是隨機的。例如,伺服器可以對 url 進行數字簽名,並驗證簽名。在這種情況下,伺服器不需要儲存隨機金鑰才能驗證它。

進一步閱讀

[編輯 | 編輯原始碼]
華夏公益教科書