在開發會員系統或表單驗證時,經常需要確認使用者輸入的 Email 信箱是否真實存在。單純的正則表達式只能檢查格式,無法確認信箱是否真的能收信。這篇文章介紹一個 PHP 類別,透過 SMTP 協定直接連線到郵件伺服器,模擬發信流程來驗證信箱是否有效。
該類別的運作流程如下:
MAIL FROM 和 RCPT TO 指令模擬寄信這種方式不會真正寄出信件,只是在 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。