BitTorrent Трекер RusTrek.ru http://5.45.70.241/ |
|
Проверка email адреса при регистрации http://5.45.70.241/viewtopic.php?f=817&t=14606 |
Страница 1 из 1 |
Автор: | oartemka178 [ 2011-06-11 16:19 ] |
Заголовок сообщения: | Проверка email адреса при регистрации |
Позволяет произвести проверку 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} <input type="radio" name="live_email_validation" value="0" {LIVE_EMAIL_VALIDATION_NO} />{L_NO}</td> </tr> Все готово! |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |