Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
СообщениеДобавлено: 2011-06-11 16:19 
Не в сети
Администратор
Администратор
Аватара пользователя
Раздал: 51.58 ТБ
Скачал: 620.08 ГБ
Ратио: 85.182


Зарегистрирован: 2010-11-09 02:24
Сообщения: 44886
Откуда: Земля Санникова
Позволяет произвести проверку email адреса при регистрации пользователя. В момент регистрации/смены почтового ящика идет проверка записи MX в DNS и проверка почтовой системы с целью установки наличия указанного ящика.
Включается/выключается из панели администратора.
Для пользователя прозрачно, если он честно ввел почтовый ящик. Если придумал что-то из головы - не даёт зарегистрироваться.

[th]http://i23.fastpic.ru/big/2011/0611/cb/e3e86d28eb25b5af64493d904aada6cb.png[/th]

Запрос

Код:
INSERT INTO `bb_config` (`config_name`, `config_value`) VALUES ('live_email_validation', '0');


Открываем admin/admin_board.php

Находим

Код:
$cookie_secure_yes = ( $new['cookie_secure'] ) ? "checked=\"checked\"" : "";


Выше добавляем

Код:
$live_email_validation_yes = ( $new['live_email_validation'] ) ? "checked=\"checked\"" : "";
$live_email_validation_no = ( !$new['live_email_validation'] ) ? "checked=\"checked\"" : "";


Находим

Код:
  "L_COOKIE_SETTINGS" => $lang['Cookie_settings'],


Выше добавляем

Код:
"L_LIVE_EMAIL_VALIDATION_TITLE" => $lang['Live_email_validation_title'],


Находим

Код:
"S_COOKIE_SECURE_ENABLED" => $cookie_secure_yes,


Выше добавляем

Код:
   "LIVE_EMAIL_VALIDATION_YES" => $live_email_validation_yes,
   "LIVE_EMAIL_VALIDATION_NO" => $live_email_validation_no,


Открываем includes/functions_validate.php

Находим

Код:
//
// Check to see if email address is banned
// or already present in the DB
//


Выше добавляем

Код:
function probe_smtp_mailbox($email, $hostname)
{
   global $bb_cfg, $lang, $phpEx;
  @set_time_limit(30);

  if ($connect = @fsockopen($hostname, 25, $errno, $errstr, 15))
  {
    usleep(888);
    $out = fgetss($connect, 1024);

    if (ereg('^220', $out))
    {
      fputs($connect, "HELO " . $hostname . "\r\n");

      while (ereg('^220', $out))
      {
        $out = fgetss($connect, 1024);
      }

      fputs($connect, "VRFY <" . $email . ">\r\n");
      $verify = fgetss($connect, 1024);

      fputs($connect, "MAIL FROM: <" . $bb_cfg['board_email'] . ">\r\n");
      $From = fgetss($connect, 1024);

      fputs($connect, "RCPT TO: <" . $email . ">\r\n");
      $To = fgetss($connect, 1024);

      fputs($connect, "QUIT\r\n");
      fclose($connect);

      if (ereg('^250', $From) && ereg('^250', $To) && !ereg('^550', $verify))
      {
        $result = array('error' => false, 'error_msg' => '');
      }
      else
      {
         $result = array('error' => true, 'error_msg' => sprintf($lang['Email_unverified'], '<a href="' . append_sid('faq.php#39') . '">' . $lang['FAQ'] . '</a>') . ((DEBUG == TRUE) ? "<br />Server: $hostname | From: $From| To: " . str_replace('-"', ' ', $To) : ' '));
      }
    }
    @fclose($connect);
  }
  else
  {
     $result = array('error' => true, 'error_msg' => sprintf($lang['No_connection'], '<a href="' . append_sid('faq.php#39') . '">' . $lang['FAQ'] . '</a>') . ((DEBUG == TRUE) ? "<br />$hostname : no route to this domain, host unavailable" : ' '));
  }
  return $result;
}

function check_smtp_addr_unix($email)
{
  list($username, $domain) = explode('@', $email);

  if (checkdnsrr($domain, 'MX'))
  {
    getmxrr($domain, $mxhosts);
    $result = probe_smtp_mailbox($email, $mxhosts[0]);

    if ($result['error'] == false)
    {
       return $result;
    }

    for ($i = 1; $i < count($mxhosts); $i++)
    {
      $result = probe_smtp_mailbox($email, $mxhosts[$i]);
      if ($result['error'] == false)
      {
         return $result;
      }
    }
    return $result;
  }
  else
  {
     return (probe_smtp_mailbox($email, $domain));
  }
}

function check_smtp_addr_win($email)
{
  list($username, $domain) = explode('@', $email);
  exec("nslookup -type=MX $domain", $outputs);

  foreach ($outputs as $hostname)
  {
    if (@strpos($domain, $hostname))
    {
      $result =  probe_smtp_mailbox($email, $domain);

      if ($result['error'] == false)
      {
         return $result;
      }
    }
  }

  if (isset($result))
  {
     return $result;
  }
  else
  {
     return (probe_smtp_mailbox($email, $domain));
  }
}


Находим

Код:
global $db, $lang;


Меняем

Код:
 global $db, $lang, $bb_cfg, $phpEx;


Находим

Код:
  if (preg_match('/^[a-z0-9&\'\.\-_\+]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*?[a-z]+$/is', $email))
    {


Ниже добавляем

Код:
     if ($bb_cfg['live_email_validation'])
      {
        $system = @preg_match("/Microsoft|Win32|IIS|WebSTAR|Xitami/", $_SERVER['SERVER_SOFTWARE']) ?
        $result = check_smtp_addr_win($email) : $result = check_smtp_addr_unix($email);

        if ($result['error'] == true)
        {
          return array('error' => true, 'error_msg' => $result['error_msg']);
        }
      }


Открываем lang_admin.php

В самый низ добавляем

Код:
$lang['Live_email_validation_title'] = 'Использовать онлайн проверку мыла';


Открываем lang_faq.php

Находим

Код:
$faq[] = array("--","Вход на форум и регистрация");


Выше добавляем

Код:
global $bb_cfg;


Находим

Код:
//
// This ends the FAQ entries
//


Выше добавляем

Код:
if ($bb_cfg['live_email_validation'])
{
  $faq[] = array("При попытке зарегистрироватся или изменить свой адрес электронной почты, получаю <b><i>'Извините, но это адрес электронной почты не могжет быть проверен'</i></b>", "Адрес электронной почты проверяется через интернет - онлайн, что бы пользователи не регистрировали не существующие адреса. <br />Проверьте правильность написания или квоту электронной почты, ящик может быть переполнен.");
  $faq[] = array("При попытке зарегистрироватся или изменить свой адрес электронной почты, получаю <b>'Не удается подключиться к почтовому серверу'</b>", "Там может быть несколько причин, почему вы получили такое сообщение, возможно, произошел сбой DNS (не может получить IP-адрес почтового сервера от хоста), или host не существует, или включен автономатический режим.");
}


Открываем lang_main.php

В самый низ добавляем

Код:
$lang['Email_unverified'] = 'Извините, но это адрес электронной почты не могжет быть проверен, см. на странице %s для дальнейшей информации'; // %s is replaced with a link to the FAQ page
$lang['No_connection'] = 'Не удается подключиться к почтовому серверу, см. на странице %s для дальнейшей информации';


Открываем templates/admin/admin_board.tpl

Находим


Код:
<tr>
   <td><h4>{L_ACCT_ACTIVATION}</h4></td>
   <td>
      <div><input type="radio" name="require_activation" value="{ACTIVATION_NONE}" {ACTIVATION_NONE_CHECKED} />{L_NONE}</div>
      <div><input type="radio" name="require_activation" value="{ACTIVATION_USER}" {ACTIVATION_USER_CHECKED} />{L_USER}</div>
      <div><input type="radio" name="require_activation" value="{ACTIVATION_ADMIN}" {ACTIVATION_ADMIN_CHECKED} />{L_ACC_ADMIN}</div>
   </td>
</tr>


Ниже добавляем

Код:
   <tr>
      <td class="row1">{L_LIVE_EMAIL_VALIDATION_TITLE}</td>
      <td class="row2"><input type="radio" name="live_email_validation" value="1" {LIVE_EMAIL_VALIDATION_YES} /> {L_YES}&nbsp; &nbsp;<input type="radio" name="live_email_validation" value="0" {LIVE_EMAIL_VALIDATION_NO} />{L_NO}</td>
   </tr>


Все готово!


Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Переместиться наверх
 Главная |  Список форумов |   Time : 0.949s | 14 Queries | GZIP : Off |