2017-06-01 199 views
-2

我想验证使用PHP的电子邮件域,因为有些用户试图使用假电子邮件ID喜欢提交联系方式:[email protected]如何使用PHP验证域名的电子邮件地址?

+2

酷。去一趟,然后回到我们身边。 – Farkie

+0

验证如何?将它与黑名单进行匹配?检查地址是否存在?如果它是有效的格式? – Ivar

+0

检查域名(和/或电子邮件地址)是否有效或语法正确之间存在巨大差异。你可以用正则表达式来检查语法,但是这会告诉你上面的电子邮件地址实际上是正确的。检查它是否有效最好由例如发送确认电子邮件到该地址并点击链接。 因此,最好先检查语法,然后再用确认邮件进行验证。 – Doqnach

回答

1

TRY与checkdnsrr从电子邮件地址中提取域名并传递给checkdnsrr。

如果找到域名,返回TRUE;如果未找到域名 或发生错误,则返回FALSE。

$domainname = "domain.com"; 

checkdnsrr($domainname , "A"); 
+0

其工作,谢谢:) – Sanjay

+0

检查MX记录不是更好吗?域名存在的事实并不意味着它可以接收电子邮件。 – Ivar

+0

@sanjay很高兴提供帮助,如果它对您有用或对您有帮助,您可以接受答案。 – Narayan

0

如果你只是想验证域名部分的语法你可以在@拆分邮件并运行在第二部分此正则表达式(通过idn_to_ascii()功能intenational域名运行它后):

/ 
    ^
    (?(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

+0

尽管如此,仍然maches“虚拟电子邮件ID:[email protected]”。 – Ivar

+0

这就是为什么它说“验证语法”,作为我上面对OP的评论的扩展。 – Doqnach

+0

是的,但答案是回答这个问题。这不是回答这个问题。 – Ivar

0

您需要检查是否有这是一个MX记录t域。

考虑这个脚本除了你的正则表达式验证

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

要知道,这不会“真正的”验证邮件完全。用户可能无效。

-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); 
?> 
+0

虽然这个链接可能回答这个问题,但它是最好在这里包含答案的基本部分,并提供参考链接。如果链接页面更改,则仅链接答案可能会失效。 - [来自评论](/ review/low-quality-posts/16605105) – worldofjr

+0

已添加示例代码 – Vlam