Kiểm tra địa chỉ email có tồn tại hay không bằng PHP

Nếu bạn có một danh sách rất nhiều email và đang tìm cách để kiểm tra email nào tồn tại hoặc không, thì bài viết này hướng dẫn cách kiểm tra một email miễn phí bằng cách sử dụng thư viện PHP.

Kiểm tra địa chỉ email có tồn tại hay không bằng PHP

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ô.

Cảnh báo: Cách kiểm tra này không đảm bảo chính xác 100%. Một số nhà cung cấp email (như Gmail) có thể chặn hoặc làm giả phản hồi để tránh bị khai thác. Việc gửi quá nhiều truy vấn SMTP cũng có thể khiến server của bạn bị đưa vào blacklist.

Chuẩn bị

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.

SMTP Validate Email

Tải về mã nguồn

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ư:

Lưu ý cuối: Việc xác minh email theo cách này mang tính kỹ thuật tham khảo là chính. Không nên dùng để quét hàng loạt hay khai thác danh sách email mà không có sự đồng ý.

Bình luận


2 bình luận