使用正則表達式檢查電子郵件格式是否符合基本規範:
public static bool IsEmail(string inputEmail)
{
inputEmail = NullToString(inputEmail);
string strRegex = @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";
Regex re = new Regex(strRegex);
return re.IsMatch(inputEmail);
}
此正則涵蓋常見郵件格式,包含 IP 位址網域與標準網域名稱。
僅檢查格式不足以確認郵箱真實存在,可嘗試連線 SMTP 伺服器進行初步驗證:
string[] host = address.Split('@');
string hostname = host[1];
IPHostEntry ipHost = Dns.Resolve(hostname);
IPEndPoint endPoint = new IPEndPoint(ipHost.AddressList[0], 25);
Socket socket = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
socket.Connect(endPoint);
// 發送 HELO、MAIL FROM、RCPT TO 等 SMTP 指令並檢查回應代碼
// 若伺服器回應 250 等成功代碼,表示郵箱可能存在
// 注意:許多伺服器為防垃圾郵件會禁用 VRFY 指令或拒絕驗證