郵箱地址校驗方法探究

LexLuc發表於2024-05-16

SaaS應用在使用者註冊賬號時,需要傳送驗證碼驗證使用者賬號郵箱正確。但如果使用者輸入的郵箱不正確,需要

自己手動開發

也是校驗郵箱地址有效性的基本原理

  1. 校驗郵箱格式
  2. 校驗DNS
  3. 校驗SMTP伺服器響應

https://stackoverflow.com/questions/69412522/what-is-the-best-way-to-verify-an-email-address-if-it-actually-exist

使用Python第三方庫驗證

from validate_email import validate_email_or_fail

import logging, sys
logging.basicConfig(stream=sys.stderr, level=logging.DEBUG);

def validate_email_address(email_addr: str):
    is_valid = validate_email_or_fail(
        email_address=email_addr,
        check_format=True,
        check_blacklist=True,
        check_dns=True,
        dns_timeout=10,
        check_smtp=True,
        smtp_timeout=10,
        smtp_skip_tls=False,
        smtp_tls_context=None,
        smtp_debug=False,
    )
    return is_valid


def test_validate():
    test_email_addr = 'your-name@example.com'
    res = validate_email_address(test_email_addr)
    print(res)


if __name__ == '__main__':
    test_validate()

以上方法僅僅提供非常基礎的校驗,不同郵件服務商對於該檢查機制並不總適用,因此實際適配工作量比較大,且需要及時跟隨郵件供應商更改策略。
如果要在生產環境中使用,第三方服務是更具價效比的選擇。

使用第三方服務(免費試用+付費)

選型方法:
找出傳送失敗的郵件,根據不同失敗原因分類,在每種分類中取樣3-5個郵箱地址,測試第三方服務能否檢測成功。

https://app.abstractapi.com/ -- 價效比還不錯,未測出明顯短板
https://www.zerobounce.net/
https://emaillistvalidation.com/
https://www.usebouncer.com/
https://app.emailable.com/ -- 無法感知目標郵箱空間不足
https://hunter.io/ -- 目標郵箱空間不足時報錯,但不知道具體原因

相關文章