PHP从txt文件中读取并验证电子邮件

时间:2014-06-25 14:39:18

标签: php email

我正在尝试创建一个验证语法和MX Record的脚本,以了解电子邮件是否正确。

但由于某种原因,这是不正确的。

有什么想法吗?


我的TXT文件:

email@facebook.com

email@gmail.com

asdhiadf@fdfsdf.com


我的PHP代码:

$fh = fopen('emails.txt','r');
while ($line = fgets($fh)) {

// Create the syntactical validation regular expression
$regexp = "^([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})$";

// Presume that the email is invalid
$valid = 0;

// Validate the syntax
if (eregi($regexp, $line))
{
    list($username,$domaintld) = split("@",$line);
    // Validate the domain
    if (getmxrr($domaintld,$mxrecords)) {
        echo(1) . "--> " . $line . "<br />";
    }
    else {
        echo (-1) . "--> " . $line . "<br />";
    }
} else {
    echo(0) . "--> " . $line . "<br />";
}

}
fclose($fh);

3 个答案:

答案 0 :(得分:2)

除了您应该考虑的问题下面的所有评论之外,代码失败的原因还在于fgets()

当你用fgets()读取一行时,除了最后一行之外,每一行末尾都会有一个换行符,所以你的正则表达式和filter_var()都会失败,除了最后一行电子邮件地址(如果您之后没有空行......)。

要解决当前问题,您需要:

while ($line = fgets($fh)) {
  $line = trim($line);

答案 1 :(得分:2)

您遇到此问题的原因是每行末尾的\n字符。

尝试将其删除:

while ($line = fgets($fh)) {
  $line = substr($line, 0,-1);

答案 2 :(得分:1)

使用preg_match评估正则表达式,并使用explode进行拆分

if(preg_match("/^([_a-z0-9-])([\._a-z0-9-]+)*@([a-z0-9-])([\.a-z0-9-]+)*(\.[a-z]{2,4})$/"),trim($email)){
     explode("@",$email);
}