Giới thiệu
Bạn có một danh sách email và muốn kiểm tra xem địa chỉ nào còn hoạt động? Trong bài viết này, mình sẽ hướng dẫn cách xác minh địa chỉ email bằng PHP, sử dụng giao thức SMTP và một thư viện mã nguồn mở.
Phương pháp này không gửi email thật mà chỉ kết nối đến máy chủ mail để kiểm tra xem địa chỉ đó có tồn tại hay không. Cách làm này có thể hữu ích cho mục đích thử nghiệm hoặc lọc dữ liệu thô.
Chuẩn bị
- Cài đặt localhost với XAMPP
- Kiến thức Bootstrap căn bản
- Kiến thức PHP căn bản
Thư viện sử dụng: SMTP Validate Email.
Cấu trúc thư mục
smtp-validate-email/
├── inc/
│ └── smtp-validate-email.php
├── index.php
File smtp-validate-email.php là thư viện bạn tải về từ GitHub.
Giao diện kiểm tra
Dưới đây là mã PHP và HTML đơn giản để nhập danh sách email và hiển thị kết quả:
<!doctype html>
<html class="no-js" lang="vi">
<head>
<meta charset="utf-8">
<title>SMTP Validate Email v1.0</title>
<meta name="robots" content="noindex, nofollow">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body>
<div class="container">
<div class="page-header">
<h3>Nhập thông tin</h3>
</div>
<form action="./" method="post">
<div class="form-group">
<label>Danh sách Email</label>
<textarea class="form-control" name="email-list" rows="10" required><?php if (isset($_POST['email-list'])) echo $_POST['email-list']; ?></textarea>
</div>
<button type="submit" name="submit" class="btn btn-primary">Lọc Danh Sách</button>
</form>
<div class="page-header">
<h3>Kết quả</h3>
</div>
<div class="form-group">
<textarea class="form-control" rows="10" onclick="this.select();">
<?php
$invalid_emails = [];
if (isset($_POST['submit'])) {
$email_list = strtolower($_POST['email-list']);
$email_list = explode("\n", str_replace("\r", "", $email_list));
require('inc/smtp-validate-email.php');
$from = '[email protected]';
foreach ($email_list as $item) {
$validator = new SMTP_Validate_Email($item, $from);
$smtp_results = $validator->validate();
if ($smtp_results[$item]) {
echo $item . "\n";
} else {
array_push($invalid_emails, $item);
}
}
}
?>
</textarea>
</div>
<div class="page-header">
<h3>Không hợp lệ</h3>
</div>
<div class="form-group">
<textarea class="form-control" rows="10" onclick="this.select();">
<?php
foreach ($invalid_emails as $item) {
echo $item . "\n";
}
?>
</textarea>
</div>
<footer>
<p>© <?php echo date('Y'); ?> SMTP Validate Email v1.0</p>
</footer>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
</body>
</html>
Chạy thử
Sau khi lưu code, bạn có thể truy cập http://localhost/smtp-validate-email/ để nhập danh sách email và kiểm tra.

Gợi ý nâng cao
- Thêm
sleep(1);giữa các lần kiểm tra để tránh bị đánh dấu là spam. - Ghi log lỗi hoặc hiển thị debug nếu muốn biết lý do xác minh thất bại.
- Thay vì kiểm tra thủ công, có thể sử dụng dịch vụ API chuyên nghiệp nếu cần kiểm tra số lượng lớn.
Lựa chọn thay thế chuyên nghiệp
Nếu bạn cần xác minh email trong hệ thống thực tế, có thể sử dụng API của các dịch vụ uy tín như:
Dumitru Adrian
26/08/2018 lúc 4:28 chiều
For email validation you can use also www.zerobounce.net They have great accuracy and competitive prices.
Người Qua Đường
21/06/2024 lúc 8:54 chiều
👍