What are the best practices for validating email addresses in PHP to ensure both syntax correctness and existence verification?

Validating email addresses in PHP involves checking both the syntax correctness of the email address and verifying its existence through methods like DNS validation. One common approach is to use regular expressions to validate the syntax, and then use techniques like SMTP validation to check if the email address exists.

function validateEmail($email) {
    // Validate email address syntax
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        return false;
    }

    // Perform DNS validation to check if the domain exists
    list($user, $domain) = explode('@', $email);
    if (!checkdnsrr($domain, 'MX')) {
        return false;
    }

    // Perform SMTP validation to check if the email address exists
    $domain = substr($email, strpos($email, '@') + 1);
    $mxRecords = [];
    getmxrr($domain, $mxRecords);
    $socket = fsockopen($mxRecords[0], 25, $errno, $errstr, 10);
    if (!$socket) {
        return false;
    }
    fclose($socket);

    return true;
}

// Example usage
$email = 'example@example.com';
if (validateEmail($email)) {
    echo 'Email address is valid.';
} else {
    echo 'Email address is invalid.';
}