За последние 24 часа нас посетили 22874 программиста и 1261 робот. Сейчас ищут 728 программистов ...

"Глупый вопрос" про mail.php

Тема в разделе "PHP для новичков", создана пользователем igorsrt, 13 июн 2017.

  1. igorsrt

    igorsrt Активный пользователь

    С нами с:
    17 сен 2015
    Сообщения:
    65
    Симпатии:
    1
    Здравствуйте! Столкнулся с такой ситуацией: скопировали с другого нашего сайта калькулятор, который должен еще и на почту отправлять результаты. Для этого в нем есть файл mail.php:
    Код (Text):
    1. ?php
    2.  
    3. /*
    4. * Contact Form Class
    5. */
    6.  
    7. header('Cache-Control: no-cache, must-revalidate');
    8. header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
    9. header('Content-type: application/json');
    10.  
    11. $admin_email = "igorsrt@mail.ru"; // Your Email
    12. $message_min_length = 1; // Min Message Length
    13.  
    14.  
    15. class Contact_Form{
    16.     function __construct($details, $email_admin){
    17.        
    18.         $this->area = trim(stripslashes($details['area']));
    19.         $this->aver_thick_screed = trim(stripslashes($details['aver_thick_screed']));
    20.         $this->floor = trim(stripslashes($details['floor']));
    21.         $this->summa = trim(stripslashes($details['summa']));
    22.         $this->my_mail = trim(stripslashes($details['my_mail']));
    23.  
    24.         $this->subject = "Заказ с калькулятора!"; // Subject    
    25.        
    26.         $this->message =
    27.             "<h1>Данные отправителя</h1>
    28.             <div style='font: 14px \"trebuchet ms\";'>
    29.                 <br>
    30.                     Площадь помещения (кв.м.): <b>".$this->area."</b>
    31.                 <br>
    32.                     Средняя толщина стяжки (мм): <b>".$this->aver_thick_screed."</b>
    33.                 <br>
    34.                   Этаж: <b>".$this->floor."</b>
    35.                 <br>
    36.                     Итого: <b>".$this->summa."</b>
    37.                 <br>
    38.                     Почта отправителя: <b>".$this->my_mail."</b>
    39.             </div>";
    40.  
    41.         $this->email_admin = $email_admin;      
    42.         $this->response_status = 1;
    43.         $this->response_html = "Ваша заказ принят!";
    44.     }
    45.  
    46.  
    47.     private function sendEmail(){
    48.         $mail = mail($this->email_admin, $this->subject, $this->message,
    49.              "From: Teeth\r\n"
    50.              ."Content-type: text/html; charset=utf-8\r\n"
    51.             ."Reply-To: ".$this->contact."\r\n"
    52.         ."X-Mailer: PHP/" . phpversion());
    53.  
    54.         $mail2 = mail($this->my_mail, $this->subject, $this->message,
    55.              "From: Teeth\r\n"
    56.              ."Content-type: text/html; charset=utf-8\r\n"
    57.             ."Reply-To: ".$this->contact."\r\n"
    58.         ."X-Mailer: PHP/" . phpversion());
    59.    
    60.         if($mail)
    61.         {
    62.             $this->response_status = 1;
    63.             $this->response_html = $this->message;
    64.         }
    65.     }
    66.  
    67.  
    68.     function sendRequest(){
    69.         if($this->response_status)
    70.         {
    71.             $this->sendEmail();
    72.         }
    73.  
    74.         $response = array();
    75.         $response['status'] = $this->response_status;  
    76.         $response['html'] = $this->message;
    77.        
    78.         echo json_encode($response);
    79.     }
    80. }
    81.  
    82. $contact_form = new Contact_Form($_POST, $admin_email);
    83. $contact_form->sendRequest();
    84. ?>
    Проблема в том, что если просто в браузере вбить путь до этого mail.php (ну и само название файла mail.php), то на почту приходит письмо (с незаполненными полями, конечно)... и, похоже, боты неприминули этим воспользоваться, т.к. таких "пустых" писем куча (в самой форме на странице сайта стоит проверка заполнения полей)...
    Соответственно вопрос: Что делать? Или ставить условие в сам файл mail.php (например что бы была обязательно заполнена почта отправителя $this->my_mail - как это сделать?), либо где-то еще, ограничить доступ к этому файлу для роботов (на сайте-источнике таких проблем не наблюдается), как правильнее?
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень
    if ( $_SERVER['REQUEST_METHOD'] == 'POST' )
    {
    82 , 83 строка
    }
     
    Алекс8 нравится это.
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    проверять и на сервере
    ещё капчу от гугла вкрячить и ваще улёт
     
    Алекс8 нравится это.
  4. igorsrt

    igorsrt Активный пользователь

    С нами с:
    17 сен 2015
    Сообщения:
    65
    Симпатии:
    1
    Спасибо!
     
  5. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    а почему не
    Код (Text):
    1. if(!empty($_POST))
    я не первый раз вижу что через $_SERVER проверяют пост.. а зачем??
     
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень
    1. хз - не вникал
    2. надежность
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    @Алекс8
    потому что пхп старый и у него дофига чего откуда растёт по историческим причинам