Background
PHP Check the mailbox address of a lot of more commonly used to write their own regular, but is a lot of trouble, I have the method of PHP with a check.
Filter_var
Filter_var is a built-in variable filtering method in PHP that provides a number of useful filters that can be used to validate integers, floating-point numbers, mailboxes, URLs, MAC addresses, and so on.
Specific filter Reference: Filters.validate
Filter_var returns FALSE, indicating that the variable cannot pass through the filter, which is illegal.
$email = "lastchiliarch@163.com";
Var_dump (Filter_var ($email, Filter_validate_email));
$email = "ASB";
Var_dump (Filter_var ($email, Filter_validate_email));
$email = "1@a.com";
Var_dump (Filter_var ($email, Filter_validate_email));
Output:
String (lastchiliarch@163.com)
BOOL (FALSE)
String (7) "1@a.com"
For ASB This illegal mailbox format returned false, but for 1@a.com passed, or slightly flawed ah.
But the general is also through will think 1@a.com is a legitimate mailbox, then what method can more accurate verification?
Checkdnsrr
CHECKDNSRR is actually used to query DNS records for the specified host, which we can use to verify that the mailbox exists.
The MX record is certainly not present for 1@a.com.
$email = "lastchiliarch@163.com";
Var_dump (CHECKDNSRR (Array_pop ("@", $email)), "MX");
$email = "1@a.com";
Var_dump (CHECKDNSRR (Array_pop ("@", $email)), "MX");
Output:
BOOL (TRUE)
BOOL (FALSE)
Can see, very perfect, the only drawback is too slow, after all, to do a network request. So it is not appropriate to sync to a large number of mailboxes using this approach to verify.
Filter_var+checkdnsrr
We can engage Filter_var and CHECKDNSRR to do the check, for the vast majority of illegal mailboxes will certainly be in Filter_var when the hang off, the rest of the reuse
CHECKDNSRR further judgment.
$email _arr = Array ("lastchiliarch@163.com", "1@a.com");
foreach ($email _arr as $email) {
if (Filter_var ($email, filter_validate_email) = = False) {
echo "Invalid email: $email \ n";
Continue
}
if (CHECKDNSRR (Array_pop (Explode ("@", $email)), "MX") = = False) {
echo "Invalid email: $email \ n";
Continue
}
}
Output: Invalid email:1@a.com
Note, however, that because only the MX record is checked, only 163.com can be judged to exist, but it cannot be explained that lastchiliarch this user is present.
To more accurately determine the existence of a mailbox, it can only be connected to the SMTP server to authenticate.