PHP。如何检查电子邮件域是否存在?

时间:2013-06-10 18:01:40

标签: php validation email dns

我想知道如何查看我是否有有效的电子邮件,包括域名。

例如,

电子邮件:

email1@gmail.comemail2@hotmail.com应该返回true,

但是电子邮件如下:

email3@gmal.comemail4@hotmai.com应该返回false。

我们怎么做?

我可以检查电子邮件是否是filter_var($email, FILTER_VALIDATE_EMAIL)的有效邮件,但这并不能保证我们可以发送电子邮件(email3@gmal.com就是一个例子)。我们如何保证我们拥有有效的域名?

3 个答案:

答案 0 :(得分:3)

您可以创建可接受域的白名单,但毫无疑问会遗漏许多有效的服务

在进行MX挖掘之后,您可以尝试在相应的端口上连接到域但是如果服务已关闭一小时进行维护?

最佳方式确定电子邮件是否有效是通过发送验证码并让用户在收到电子邮件后点击/输入代码。

答案 1 :(得分:1)

您可以使用 CURL 来检查域是否存在,此选项非常简单但效果很好。快速实施。

检查此响应是否经过良好测试的解决方案:   - https://stackoverflow.com/a/12547629/1146492

要获取域名电子邮件,您可以使用以下内容:

<?php
function getDomainFromEmail($email)
{
// Get the data after the @ sign
$domain = substr(strrchr($email, "@"), 1);

return $domain;
}

// Example

$email = 'the_username_here@yahoo.com';

$domain = getDomainFromEmail($email);

echo $domain; // yahoo.com
?>

而不是使用CURL进行快速检查。

答案 2 :(得分:0)

一种可能的解决方案是尝试连接到域并查看它是否成功:

if(fopen("http://$domain"))
{
    echo "success, valid domain";
} else {
    echo "failure, not valid domain";
}

$domain@符号后面的电子邮件地址部分。 (这可以使用正则表达式获得。)