Advertisement
tolikpunkoff

mail-2.1.php

May 20th, 2017
1,311
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 10.02 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://example.org/contactform.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 = (isset($_POST['email'])) ? $_POST['email'] : false;
  118.         $name = (isset($_POST['name'])) ? $_POST['name'] : false;
  119.         $sub = (isset($_POST['sub'])) ? $_POST['sub'] : false;
  120.         $message = (isset($_POST['message'])) ? $_POST['message'] : false;
  121.         $myself = (isset($_POST['myself'])) ? true : false;
  122.        
  123.         //проверяем заполнение полей
  124.         if (!$name || strlen($name) < 1) //поле имени
  125.         {
  126.             $usermessage.="Укажите свое имя.<br> ";
  127.             $err=true;
  128.         }
  129.         if (!$email || strlen($email) < 3) //поле e-mail
  130.         {
  131.             $usermessage.="Укажите корректный адрес электронной почты.<br> ";
  132.             $err=true;
  133.         }
  134.         if (!$sub || strlen($sub) < 1) //поле темы
  135.         {
  136.             $usermessage.="Укажите тему обращения.<br> ";
  137.             $err=true;
  138.         }
  139.         if(!$message || strlen($message) < 1) //поле сообщения
  140.         {
  141.             $usermessage.="Введите сообщение.<br> ";
  142.             $err=true;
  143.         }
  144.     }
  145.    
  146.    
  147.     //основная работа
  148.     if (!$err) //делаем, если нет ошибок
  149.     {          
  150.         if ( (!isset($_COOKIE['mycaptchamd5'])) || !$myself ) //cookie не установлен, каптча не введена
  151.         {          
  152.             $usermessage=createform ($name,$email, $sub,$message,$allnum,false); //генерируем форму с каптчей и данными
  153.         }
  154.         else //каптча введена или нажата кнопка 'Обновить код'
  155.         {
  156.             if (isset($_POST['updcode'])) //обновить код
  157.             {
  158.                 $usermessage=createform ($name,$email, $sub,$message,$allnum,false); //генерируем форму с каптчей и данными
  159.             }
  160.            
  161.             if (isset($_POST['checkcode'])) //проверить код
  162.             {
  163.                 $usercodemd5=md5(trim($_POST['captchacode']));  //извлекаем код, введенный пользователем в соотв. поле формы и получаем
  164.                                                                 //MD5-хэш
  165.                 $gencodemd5=$_COOKIE['mycaptchamd5'];           //вытаскиваем ранее сохраненный хэш
  166.            
  167.                 //проверка каптчи
  168.                 if ($usercodemd5==$gencodemd5) //код введен верно
  169.                 {
  170.                     setcookie("mycaptchamd5","",time()-300); //удаляем cookie
  171.                
  172.                     //отправка сообщения
  173.                     //формируем сообщение
  174.                     $mes = "Имя: ".$name."\n\nТема: " .$sub."\n\nСообщение: ".$message."\n\n"."E-mail to answer: $email\n\n";
  175.                     //отправляем
  176.                     $send = mail ($address,$sub,$mes,"Content-type:text/plain; charset = UTF-8\r\nFrom:$address");
  177.                     if ($send) //сообщение успешно отправлено
  178.                     {
  179.                         //сообщение пользователю об успехе
  180.                         $usermessage="<center><b><font color='blue'>Сообщение успешно отправлено!<br>
  181.                                 Форма обратной связи будет открыта через ".$redirtime." секунд(ы) </center></b></font>";
  182.                         $redir=true; //устанавливаем статус редиректа
  183.                     }
  184.                     else //ошибка функции mail()
  185.                     {
  186.                         $usermessage="Внутренняя ошибка при отправке сообщения! :(";
  187.                         $err=true;                     
  188.                     }
  189.                 }
  190.                 else //код неправильный
  191.                 {
  192.                     $usermessage=createform ($name,$email, $sub,$message,$allnum,true); //генерируем форму с каптчей и данными
  193.                 }
  194.             }
  195.         }
  196.     }  
  197.    
  198.     //если ранее произошла ошибка
  199.     //уcтанавливаем флаг редиректа
  200.     if ($err)
  201.     {
  202.         $redir = true;
  203.     }
  204.    
  205.     //редирект
  206.     if ($redir)
  207.     {
  208.         header( 'Refresh: '.$redirtime.'; url='.$rediraddr );
  209.     }
  210.    
  211.     //сообщение пользователю
  212.     if ($err) //об ошибке
  213.     {
  214.         echo "<b><font color='red'>".$usermessage."</font></b></br>
  215.             <font color='blue'>Вы будете перенаправлены обратно через ".$redirtime." секунд(ы)</font>";
  216.     }
  217.     else //какое-то другое
  218.     {
  219.         echo $usermessage;
  220.     }
  221.    
  222. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement