Advertisement
tolikpunkoff

mail-2.0.php

Apr 22nd, 2017
357
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 9.69 KB | None | 0 0
  1. <?php
  2.     /*Скрипт отправляющий e-mail.
  3.     Скрипт использует ASCII-каптчу
  4.     ASCII-captcha: https://pastebin.com/LPKgY3WE
  5.     Статья о ASCII-каптче: http://tolik-punkoff.com/2017/04/13/ascii-kaptcha-kaptcha-psevdografikoj-chast-i/
  6.     Предыдущая версия скрипта: https://pastebin.com/PGv30rnH
  7.     Статья о контактной форме для Wordpress: http://tolik-punkoff.com/2017/03/02/forma-obratnoj-svyazi-dlya-wp-bez-plagina/
  8.  
  9.     Script sending e-mail.
  10.     The script uses ASCII-captcha
  11.     ASCII-captcha: https://pastebin.com/LPKgY3WE
  12.     Article about ASCII-captcha: http://tolik-punkoff.com/2017/04/13/ascii-kaptcha-kaptcha-psevdografikoj-chast-i/
  13.     Previous version of the script: https://pastebin.com/PGv30rnH
  14.     Article about the contact form for Wordpress: http://tolik-punkoff.com/2017/03/02/forma-obratnoj-svyazi-dlya-wp-bez-plagina/
  15.  
  16.     (L) Hex_Laden aka Tolik Punkoff, 2017
  17. */
  18.  
  19.     include ('captcha.php'); //подключаем модуль генерирующий каптчу
  20.    
  21.     function br_repl($str)
  22.     {
  23.         return str_replace("\r\n","<br>",$str);
  24.     }
  25.    
  26.     //функция, формирующая форму с каптчей и отправленными данными
  27.     function createform ($name, $email, $sub, $message, $allnum, $errcaptcha)
  28.     {  
  29.         //получаем код каптчи, псевдографическое изображение
  30.         //и устанавливаем cookie
  31.         $captchacode=getcaptchacode(6); //генерируем код капчи
  32.         setcookie('mycaptchamd5',md5($captchacode),time()+300); //сохраняем в cookie MD5-хэш кода каптчи, устанавливаем время действия в 5 минут
  33.         $captcha=getpgnum($captchacode,$allnum," ",1,false,false); //генерируем псевдографическое изображение капчи по коду
  34.        
  35.         //если установлен флаг ошибки ввода кода каптчи
  36.         $emess="";     
  37.         if ($errcaptcha)
  38.         {
  39.             $emess="<b><font color='red'>Проверочный код введен неверно</font></b>";
  40.         }
  41.        
  42.         return "<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'><style type='text/css'>
  43.             TABLE {
  44.             width: 300px; /* Ширина таблицы */
  45.             border-collapse: collapse; /* Убираем двойные линии между ячейками */
  46.             }
  47.             TD, TH {
  48.             padding: 3px; /* Поля вокруг содержимого таблицы */
  49.             border: 1px solid gold; /* Параметры рамки */
  50.             font: 12pt/10pt monospace;
  51.             }
  52.             #footer {
  53.             position: fixed; /* Фиксированное положение */
  54.             left: 0; bottom: 0; /* Левый нижний угол */
  55.             padding: 10px; /* Поля вокруг текста */
  56.             width: 100%; /* Ширина слоя */
  57.             }
  58.             </style><title>Отправка сообщения</title></head><body bgcolor='black' text='silver'><center><h2>Отправка сообщения</h2><br>
  59.             <b>Проверьте ваши данные и подтвердите, что вы не робот</b></center>
  60.            
  61.             <table align='center'>
  62.             <tr><td>Name:</td><td>$name</td></tr>
  63.             <tr><td>E-mail:</td><td>$email</td></tr>
  64.             <tr><td>Subject:</td><td>$sub</td></tr>
  65.             <tr><td colspan='2'><center>Message</center></td></tr>
  66.             <tr><td colspan='2'>".br_repl($message)."</td></tr>
  67.             <tr><td colspan='2'><center>Security code</center></td></tr>
  68.             <tr><td colspan='2'><center><code><font color='lime'><pre>".$captcha."</pre></font></code></center></td></tr>
  69.             <tr><td colspan='2'><center>$emess</center></td></tr>".
  70.             "<tr><td colspan='2'><center><form action='".$_SERVER['PHP_SELF']."' method='POST'>
  71.                 <p><b>Введите проверочный код</b></br>
  72.                 <p><input type='text' name='captchacode'></p>
  73.                 <p>
  74.                     <input type='submit' name='checkcode' value='Проверить код'>
  75.                     <input type='submit' name='updcode' value='Обновить код'>
  76.                 </p>
  77.                 <input type='hidden' name='name' value='$name'>
  78.                 <input type='hidden' name='email' value='$email'>
  79.                 <input type='hidden' name='sub' value='$sub'>
  80.                 <input type='hidden' name='message' value='$message'>
  81.                 <input type='hidden' name='myself' value='true'>
  82.             </form></center></td></tr>
  83.             <tr><td colspan='2'><center><font color='#0099FF'>Для изменения данных вернитесь в
  84.                                 форму отправки с помощью кнопки 'Назад' браузера</font></center></td></tr>
  85.             </table></body></html>";
  86.     }
  87.    
  88.     //переменные
  89.     $err=false; //статус ошибки
  90.     $usermessage=""; //сообщение, выводимое пользователю
  91.    
  92.     $address="admin@example.org"; //адрес для отправки
  93.     $name=""; //имя пользователя
  94.     $email=""; //обратный адрес
  95.     $sub=""; //тема
  96.     $message=""; //сообщение
  97.    
  98.     //если пользователь сделает назад, кука останется
  99.     //тогда будет глюк
  100.     //надо проверить, с какой формы пришел запрос
  101.     //если со странички - почистить куку
  102.     //переменная для контроля этого дела
  103.     $myself=false;
  104.    
  105.     $redir=false; //статус редиректа
  106.     $rediraddr="http://mail.loc/mail.html"; //адрес редиректа пользователя после отправки сообщения
  107.     $redirtime=3; //время до редиректа (сек)
  108.    
  109.     //проверка на ошибки и установка переменных
  110.     if ((empty($_POST))||($_SERVER['REQUEST_METHOD']!='POST')) //запрос кривой или кто-то просто с адресом балуется
  111.     {
  112.         $usermessage="Ошибка запроса POST! ";
  113.         $err=true;
  114.     }
  115.     else //устанавливаем переменные
  116.     {
  117.         $email = $_POST['email'];
  118.         $name = $_POST['name'];    
  119.         $sub = $_POST['sub'];
  120.         $message = $_POST['message'];
  121.         $myself = $_POST['myself'];
  122.     }
  123.    
  124.     //проверяем заполнение полей
  125.     if (!$name) //поле имени
  126.     {
  127.         $usermessage.="Укажите свое имя. ";
  128.         $err=true;
  129.     }
  130.     if (!$email) //поле e-mail
  131.     {
  132.         $usermessage.="Укажите электронную почту. ";
  133.         $err=true;
  134.     }
  135.     if (!$sub) //поле темы
  136.     {
  137.         $usermessage.="Укажите тему обращения. ";
  138.         $err=true;
  139.     }
  140.     if(!$message || strlen($message) < 1) //поле сообщения
  141.     {
  142.         $usermessage.="Введите сообщение. ";
  143.         $err=true;
  144.     }
  145.    
  146.     //основная работа
  147.     if (!$err) //делаем, если нет ошибок
  148.     {          
  149.         if ( (!isset($_COOKIE['mycaptchamd5'])) || !$myself ) //cookie не установлен, каптча не введена
  150.         {          
  151.             $usermessage=createform ($name,$email, $sub,$message,$allnum,false); //генерируем форму с каптчей и данными
  152.         }
  153.         else //каптча введена или нажата кнопка 'Обновить код'
  154.         {
  155.             if (isset($_POST['updcode'])) //обновить код
  156.             {
  157.                 $usermessage=createform ($name,$email, $sub,$message,$allnum,false); //генерируем форму с каптчей и данными
  158.             }
  159.            
  160.             if (isset($_POST['checkcode'])) //проверить код
  161.             {
  162.                 $usercodemd5=md5(trim($_POST['captchacode']));  //извлекаем код, введенный пользователем в соотв. поле формы и получаем
  163.                                                                 //MD5-хэш
  164.                 $gencodemd5=$_COOKIE['mycaptchamd5'];           //вытаскиваем ранее сохраненный хэш
  165.            
  166.                 //проверка каптчи
  167.                 if ($usercodemd5==$gencodemd5) //код введен верно
  168.                 {
  169.                     setcookie("mycaptchamd5","",time()-300); //удаляем cookie
  170.                
  171.                     //отправка сообщения
  172.                     //формируем сообщение
  173.                     $mes = "Имя: ".$name."\n\nТема: " .$sub."\n\nСообщение: ".$message."\n\n"."E-mail to answer: $email\n\n";
  174.                     //отправляем
  175.                     $send = mail ($address,$sub,$mes,"Content-type:text/plain; charset = UTF-8\r\nFrom:$address");
  176.                     if ($send) //сообщение успешно отправлено
  177.                     {
  178.                         //сообщение пользователю об успехе
  179.                         $usermessage="<center><b><font color='blue'>Сообщение успешно отправлено!<br>
  180.                                 Форма обратной связи будет открыта через ".$redirtime." секунд(ы) </center></b></font>";
  181.                         $redir=true; //устанавливаем статус редиректа
  182.                     }
  183.                     else //ошибка функции mail()
  184.                     {
  185.                         $usermessage="Внутренняя ошибка при отправке сообщения! :(";
  186.                         $err=true;
  187.                         $redir=true;
  188.                     }
  189.                 }
  190.                 else //код неправильный
  191.                 {
  192.                     $usermessage=createform ($name,$email, $sub,$message,$allnum,true); //генерируем форму с каптчей и данными
  193.                 }
  194.             }
  195.         }
  196.     }
  197.     else //иначе устанавливаем статус редиректа в true
  198.     {
  199.         $redir=true;
  200.     }
  201.    
  202.     //редирект
  203.     if ($redir)
  204.     {
  205.         header( 'Refresh: '.$redirtime.'; url='.$rediraddr );
  206.     }
  207.    
  208.     //сообщение пользователю
  209.     if ($err) //об ошибке
  210.     {
  211.         echo "<b><font color='red'>".$usermessage."</font></b></br>
  212.             <font color='blue'>Вы будете перенаправлены обратно через ".$redirtime." секунд(ы)</font>";
  213.     }
  214.     else //какое-то другое
  215.     {
  216.         echo $usermessage;
  217.     }
  218.    
  219. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement