首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 實作 SMTP 協定驗證 Email 有效性的類別

     編輯:PHP 綜合知識

前言

在開發會員系統或表單驗證時,經常需要確認使用者輸入的 Email 信箱是否真實存在。單純的正則表達式只能檢查格式,無法確認信箱是否真的能收信。這篇文章介紹一個 PHP 類別,透過 SMTP 協定直接連線到郵件伺服器,模擬發信流程來驗證信箱是否有效。

核心原理

該類別的運作流程如下:

  1. 解析 Email 域名部分(@ 後面的字串)
  2. 查詢該域名的 MX 記錄,取得郵件伺服器位址
  3. 建立 SMTP 連線並進行握手
  4. 發送 MAIL FROM 和 RCPT TO 指令模擬寄信
  5. 根據伺服器回應碼判斷信箱是否存在

這種方式不會真正寄出信件,只是在 RCPT TO 階段收到回應後即中斷連線,因此屬於「輕量級驗證」。

程式碼範例

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Sample</title>
</head>
<body>
<?php
// 來源:www.codepearl.com
include_once 'class.verifyEmail.php';

$email = 'verify@codepearl.com';
$vmail = new verifyEmail();

if ($vmail->check($email)) {
    echo 'email <' . $email . '> exist!';
} elseif ($vmail->isValid($email)) {
    echo 'email <' . $email . '> valid, but not exist!';
} else {
    echo 'email <' . $email . '> not valid and not exist!';
}
?>
</body>
</html>

回傳值說明

  • check() 回傳 true:信箱存在且可接收郵件
  • isValid() 回傳 true:格式正確但信箱不存在
  • 兩者皆為 false:格式錯誤或域名無 MX 記錄

注意事項

部分郵件伺服器(如 Gmail、Outlook)為防止垃圾郵件掃描,可能會對所有 RCPT TO 回應 250(接受),導致無法準確判斷。建議搭配格式驗譱與發送驗證信兩種機制並用。

結語

這個類別提供了超越格式檢查的實用驗證方式,適合註冊流程、清單清洗等場景。實際部署時請注意頻率限制,避免被郵件伺服器封鎖 IP。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved