Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

PHP и DNS. Проверка почтового адреса

Источник: www.sbgro.com

Функция 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, если все порядке.

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 

Комментарии

1.
Аноним
+0 / -2
Мне нравитсяМне не нравится
5 мая 2006, 00:40:23
ПРЕВЕД
Замечание: This function is not implemented on Windows platforms. Try the PEAR class Net_DNS.

2.
Аноним
+1 / -1
Мне нравитсяМне не нравится
16 апреля 2006, 20:34:30
Большое спасибо.
3.
Аноним
+0 / -4
Мне нравитсяМне не нравится
6 апреля 2006, 14:58:35
Ошибки в коде это круто "for($i = 0; $i < count($maillist), ++$i)"
4.
Аноним
+0 / -2
Мне нравитсяМне не нравится
22 марта 2006, 23:19:33
list($Username, $Domain) = split("@",$Email);
от этой строки кода можно избавицца, если юзать массив regs в первой (я говорю о последнем листинге)

а у меня ничего не получаецца кстати с проверкой. пишет Fatal error: Call to undefined function getmxrr()
помогите кто-нить
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог