0

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

例如,

像这样的电子邮件:

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

但电子邮件如:

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

我们应该怎么做?

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

4

3 回答 3

3

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

进行 MX 挖掘后,您可以尝试在适当的端口上连接到域,但如果服务因维护而停机一小时怎么办?

确定电子邮件是否有效的最佳方法是发送验证码,并让用户在收到电子邮件后单击/输入验证码。

于 2013-06-10T18:15:09.963 回答
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 进行快速检查。

于 2013-06-10T19:35:54.560 回答
0

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

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

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

于 2013-06-10T18:06:49.230 回答