проверка адресов электронной почты колледжа edu с php - PullRequest
2 голосов
/ 24 августа 2011

Я хочу проверить адреса электронной почты, чтобы убедиться, что это адреса колледжа.Каков наилучший способ сделать это?У меня есть список колледжей в базе данных, и для каждого я указываю URL, который должен быть частью адреса электронной почты пользователя для этого колледжа.Так что для гарварда URL-адрес - «harvard.edu», потому что все адреса электронной почты гарварда имеют его как часть имени хоста.

Есть ли у кого-нибудь функция PHP, которая позволит мне это делать?

Ответы [ 8 ]

1 голос
/ 24 августа 2011

Сначала я проверил бы, является ли электронная почта действительным

if(filter_var($email, FILTER_VALIDATE_EMAIL))

, если это так, я бы извлек имя домена

$mailDomain = substr(strrchr($email, "@"), 1);

, как только оно будет извлечено, я бы проверил, существует ли онов моей базе

mysql_query("SELECT count(domain_name) from domain where domain_name = ".mysql_real_escape_string($mailDomain));
1 голос
/ 24 августа 2011

Примечание. При этом будут проверяться только адреса электронной почты * .edu

Вы можете упростить это, чтобы просто проверить электронную почту edu:

$email = "myemail@uni.edu";

function isEduEmail($email){
  $email = explode(".",$email);
  if($email[count($email)-1] == "edu")
    return true;
  else
    return false;
}

var_dump(isEduEmail($email)); // echo bool(true)

Я понимаю, что для других было бы лучшее решение с использованием регулярных выражений, но я не согласен с этим, так что это решение.

0 голосов
/ 25 августа 2011
$email="bob@harvard.edu";
$lthree=substr($email,-3);
$edu=false;
if ($lthree=="edu") $edu=true;

Теперь, если $ edu имеет значение true, тогда электронное письмо является электронным письмом edu.

0 голосов
/ 24 августа 2011

Как-то так (надеюсь, вы поняли)

Я не уверен, что это правильный код, потому что написал без тестирования:

<?php

$usersEmail1 = "i.am@harvard.edu";

$email1Exploded = explode("@", $usersEmail1);
if (sizeof($email1Exploded) == 2) {
  $domain1 = trim($email1Exploded[1]);
  $result = mysql_query("SELECT * from valid_domains WHERE url LIKE '%" . mysql_real_escape_string($domain1) . "' LIMIT 1");
  if (!empty(mysql_num_rows($result))) {
    //Valid email
  } else {
    //Invalid email
  }
} else {
  //not valid email
}


?>
0 голосов
/ 24 августа 2011

Если у вас есть список доменов, просто проверьте, заканчивается ли данный адрес электронной почты на «@ whitelisted.domain».Вы можете использовать filter_var() для проверки правильности адреса электронной почты, а затем strpos(), чтобы проверить, содержит ли он нужный домен.

Пример:

$domains = array('test.org', 'fake.com');

$email = 'test@fake.com';
$email = filter_var($email, FILTER_VALIDATE_EMAIL);
$email_ok = false;
foreach ($domains as $d) {
    if (strpos($email, '@' . $d) !== false) {
        $email_ok = true;
        break;
    }
}
// $email_ok is true if email's domain is on our whitelist
var_dump($email, $email_ok);

Если вы хотите сделатьпроверка путем запроса к серверу MySQL, извлеките часть письма после @ и проверьте, есть ли он в вашем списке.

0 голосов
/ 24 августа 2011

Одна подкладка:

function isEduEmail($sEmail) {
    return (substr($sEmail, strrpos($sEmail, ".")+1) == "edu");
}
0 голосов
/ 24 августа 2011

Поскольку у вас есть данные в mysql, пример запроса, подобный этому, должен работать

$some_email = ... ; // don't forget to sanitize
$sql = <<<SQL
select count(*) from tables
where domain_name = substring_index('{$some_email}', '@', -1);
SQL;

... // processing
// return >=1 is a valid edu email
0 голосов
/ 24 августа 2011

Проверяет, заканчивается ли строка .edu

<?php

$email = "myemail@uni.edu";

function isEduEmail($email){
  $eLength = strlen($email) - 1;
  $local = substr($email, $eLength - 3, $eLength );
  if($local === '.edu') return true;
  return false;
}

var_dump(isEduEmail($email)); // echo bool(true)

?>

DEMO: http://codepad.org/97LlxPX1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...