Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: А можно хоть приблизительно оценить реальность п/я ящика?
 
 автор: Valleri   (01.06.2011 в 03:12)   письмо автору
 
 

А можно хоть приблизительно оценить реальность п/я ящика?

  Ответить  
 
 автор: cheops   (01.06.2011 в 05:36)   письмо автору
 
   для: Valleri   (01.06.2011 в 03:12)
 

Можно отправить почтовое сообщение на данным момент с уникальной ссылкой, по которой пользователь должен перейти, чтобы подтвердить реальность существования данного e-mail.

  Ответить  
 
 автор: Саня   (01.06.2011 в 06:29)   письмо автору
 
   для: Valleri   (01.06.2011 в 03:12)
 

Можно спросить сам почтовый сервер. Например так:
<?

function isValid($email) {

  
// для начала проверим формат адреса
  
if ( !filter_var($emailFILTER_VALIDATE_EMAIL) ) return false// для этой функции нужен PHP 5.2 и выше
    
  // затем получим MX адреса
  
list(, $domain) = explode('@'$email);
  if ( !
getmxrr($domain$mx) ) $mx = array($domain); // на windows эта функция работает только в PHP 5.3 и выше
    
  // подключаемся к SMTP порту
  
$fp = @fsockopen($mx[0], 25$errno$errstr1);
  if ( !
$fp ) return false;
    
  
// общаемся с сервером
  
$resp = array();
  
fwrite($fp"HELO example.com\r\n");
  
$helo fread($fp1024);
  if ( 
substr($helo03) !== '220' ) return false;
  
fwrite($fp"MAIL FROM: <nobody@example.com>\r\n");
  
$resp[] = fread($fp1024);
  
fwrite($fp"RCPT TO: <$email>\r\n");
  
$resp[] = fread($fp1024);
  
fwrite($fp"QUIT\r\n");
  
$resp[] = fread($fp1024);
  
fclose($fp);
    
  
// проверяем ответы сервера
  
foreach ( $resp as $r ) {
    if ( 
substr($r02) !== '25' ) {
      return 
false;
    }
  }
    
  return 
true;
}
var_dump(isValid('petyavasya30@gmail.com'));

Результат работы этой функции сильно зависит от настроек почтового сервера и антиспамовых фильтров. Например, она гарантированно не работает для mail.ru. Я не рекомендую использовать эту функцию в реальных проектах и уж тем более полагаться на её результаты.
Если и применять, то только для проверенных почтовых серверов. Причём этот список нужно постоянно перепроверять, так как поведение сервера может внезапно измениться и функция станет врать.

Лучше отправлять активационное письмо, как предлагает cheops.

  Ответить  
 
 автор: Саня   (01.06.2011 в 07:29)   письмо автору
 
   для: Valleri   (01.06.2011 в 03:12)
 

У большинства почтовиков при регистрации есть автоматическая проверка занятости выбранного логина. Можно проследить что за AJAX-запросы посылаются и сэмулировать их.

Каждый сервер накладывает свои ограничения на логин, например минимальная, максимальная длина и допустимый набор символов в логине. Можно ориентироваться на это. Вряд ли адрес ag@mail.ru является реальным, так как у mail.ru минимальная длина логина — 4 символа.

А ещё в сети куча сервисов одноразовых почт. Например mailinator.com. Вряд ли такую почту можно назвать реальной. Поэтому можно вести список таких сервисов и проверять почту по нему.

Ещё можно проводить анализ логина на "человечность". Например, довольно мала вероятность того, что адрес aghekjfnnsey@mail.ru зарегистрировал человек, а не бот.


Все перечисленные способы ненадёжны и трудоёмки в реализации и поддержке актуальности. Пусть этим занимаются спамеры. А активационное письмо — наше всё!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования