CodeNet / Языки программирования / PHP / Безопасность
CodeNet / Языки программирования / PHP / Интернет
PHP и DNS. Проверка почтового адреса
Функция getmxrr
string getmxrr(string hostname, array mxhost, [, array weight])
Эта функция принимает в качестве аргумента имя хоста hostname
в данном домене и заполняет массив mxhost
списком почтовых ретрансляторов этого домена. Если указан третий необязательный аргумент weight , то функция заполняет его значениями предпочтения, которые возвращает ей почтовый ретранслятор
Обычно когда требуется послать сообщения по адресу username@someserver.com, необходимо сначала узнать хост почтового ретранслятора для домена someserver.com, а затем получить его ip-адрес.
После этого можно соединяться с хостом для доставки почты.
В домене может быть несколько почтовых ретрансляторов с разными значениями предпочтения, поэтому, получив список ретрансляторов, имеет смысл устанавливать соединение с тем из них, который имеет максимальное значение предпочтения.
В следующем листинге показан пример кода, с помощью которого можно получить список почтовых ретрансляторов:
Получение списка почтовых ретрансляторов
<? $domain = "server.com"; getmxrr($domain, $maillist, $priority); echo("Список почтовых ретрансляторов хоста $domain: <br>\n"); for($i = 0; $i < count($maillist), ++$i) { echo("$maillist[$i] = $priority[$i] <br>\n"); } ?>
Проверка существования адреса электронной почты
Заметим сразу, что речь идет не о проверке адресов с помощью регулярного выражения, а о проверке существования хоста почтового ретранслятора для некоторого домена.
Т.е. приведенный выше код можно практически не перерабатывая приспособить для проверки существования e-mail адреса:
<? $email_arr = explode("@" , $email); $host = $email_arr[1]; if (!getmxrr($host, $mxhostsarr)) { echo "На адрес $email отправка почты невозможна"; exit; } getmxrr($host, $mxhostsarr, $weight); echo "На $email письма могут отправляться через следующие хосты:<br>"; for ($i=0; $i < count($mxhostsarr); $i++) { echo ("$mxhostsarr[$i] = $weight[$i]<br>"); } ?>
А вот так выглядит функция проверки правильности E-Mail'а. Помните, эта функция проверят только существование почтового сервера и синтаксическую правильность адреса. Для полной проверки существования адреса необходимо отправить на него письмо со случайным кодом и попросить получателя письма ввести этот код а форме, на вашем сайте.
function CheckEmail($Email) { if (!eregi("^[\._a-zA-Z0-9-]+@[\.a-zA-Z0-9-]+\.[a-z]{2,6}$", $Email)) return 1; list($Username, $Domain) = split("@",$Email); if (@getmxrr($Domain, $MXHost)) return 0; else { $f=@fsockopen($Domain, 25, $errno, $errstr, 30); if($f) { fclose($f); return 0; } else return 1; } }
Функция возвращает 1, если адрес указан неверно и 0, если все порядке.
Оставить комментарий
Комментарии
Замечание: This function is not implemented on Windows platforms. Try the PEAR class Net_DNS.
от этой строки кода можно избавицца, если юзать массив regs в первой (я говорю о последнем листинге)
а у меня ничего не получаецца кстати с проверкой. пишет Fatal error: Call to undefined function getmxrr()
помогите кто-нить