如何使用PHP验证域名的电子邮件地址?

时间:2017-06-01 06:48:41

标签: php regex email dns email-validation

我想使用php验证电子邮件域名,因为有些用户尝试使用虚拟电子邮件ID提交联系表单,例如:aa@bb.com

4 个答案:

答案 0 :(得分:1)

使用checkdnsrr尝试从电子邮件地址中提取域名并传递给checkdnsrr。

  

如果找到域名,则返回TRUE;如果没有域名,则返回FALSE   被发现或发生错误。

$domainname = "domain.com";

checkdnsrr($domainname , "A");

答案 1 :(得分:0)

如果您只想验证域名部分的语法,可以在@上拆分电子邮件,然后在第二部分运行此正则表达式(在通过idn_to_ascii()函数运行之后进行域名):

/
    ^
    (?(DEFINE)(?<part>(?:xn--)?[a-z\d](?:[a-z\d-]*[a-z\d])?))
    (?(DEFINE)(?<subpart>(?:xn--)?[a-z\d_](?:[a-z\d_-]*[a-z\d])?))
    (?:(?&subpart)\.)*
    (?&part)
    (?:\.[a-z]+|\.xn--[a-z\d]+){1,2}
    $
/xigm

https://regex101.com/library/PAKVdK

答案 2 :(得分:0)

您需要检查该域是否有MX记录。

除了正则表达式验证之外,请考虑此脚本

https://davidwalsh.name/php-email-validator

请注意,这不会“真正”完全验证电子邮件。用户可能无效。

答案 3 :(得分:-1)

如果您不想经历自己进行验证的所有麻烦,只需使用MailboxValidator中的free API plan

他们有一些示例代码可以帮助您进行集成。

http://www.mailboxvalidator.com/api-single-validation

<?php
$apiKey = 'Enter_License_Key';
$params['format']           = 'json';
$params['email']     = 'Enter_Email';

$query = '';

foreach($params as $key=>$value){
    $query .= '&' . $key . '=' . rawurlencode($value);
}

$try = 0;
do {
    ////////////
    //For https request, please make sure you have enabled php_openssl.dll extension.
    //
    //How to enable https
    //- Uncomment ;extension=php_openssl.dll by removing the semicolon in your php.ini, and restart the apache.
    //
    //In case you have difficulty to modify the php.ini, you can always make the http request instead of https.
    ////////////
    $result = file_get_contents('https://api.mailboxvalidator.com/v1/validation/single?key=' . $apiKey . $query);
} while(!$result && $rty++ < 3);

$data = json_decode($result);

print_r($data);
?>