Как настроить отправку формы с лендинга

177
09 августа 2021, 02:00

На сайте есть две формы:

первая - для заказа консультации, вторая - для оформления подписки. Подскажите, каким образом можно настроить отправку писем мне на почту с данного лендинга, с данными, который ввел пользователь. При оформлении подписки, нужно просто чтоб в теме письма был заголовок, указывающий, на то, что пользователь хочет оформить подписку. Заранее благодарен.

Answer 1
  1. Качаем и устанавливаем PHPMailer (вкратце: это PHP-библиотека для отправки почты, устанавливается путём копирования папки на сервер, подключается и настраивается путем создания конфигурационного файла)
  2. Гуглим как его настроить, вводим SMTP-данные своей почты в настройки (для этого создадим php файл, пропишем там настройки и функцию отправки, пример приложил в шаге №5)
  3. На странице с формой код формы должен выглядеть примерно так:

    ....
    <form action="sendmail.php" method="POST">
        <input name="name" type="text" placeholder="Ваше имя">
        <input name="email" type="text" placeholder="Ваша почта">
        <input name="phone" type="text" placeholder="Ваш телефон">
        <input name="details" type="text" placeholder="Детали заявки">
        ....
        <input type="submit" value="Оставить заявку">
    </form>
    ....
    

    тут важно обратить внимание на method='POST' (способ как будем отправлять и следовательно получать данные сервером), action="sendmail.php" (страница на которую будем отправлять данные с формы, её мы создадим в следующем шаге) и name каждого input-a для того чтобы указать его в серверной части, таким образом получив его значение.

  4. Создаём файл sendmail.php в нём пишем что-то вроде:

    <?php
        $name = $_POST['name'];
        $email = $_POST['email'];
        $phone = $_POST['phone'];
        $details = $_POST['details'];
        require_once('mail.class.php'); //подключим настройки phpmailer, этот файл мы создадим на 5 шаге
        $message_data = array(
           'to'      =>  'почта@приема.заявок', 
           'to_name' =>  'Новая заявка от '.$name,      
           'text'    =>  $name.', '.$email.', '.$phone.','.$details
        );
        $mailer = new mail; //класс из файла mail.class.php который мы подключили выше
        $sendmail = $mailer->send($message_data);
        $answer = 'EMPTY';
        if ($sendmail == 0)
        {
            $answer = 'Заявка оставлена!';
        } else {
            $answer = 'Ошибка! Письмо не было отправлено.';     
        }
        echo $answer;
    ?>
    
  5. Файл mail.class.php (так уж и быть, распишу настройки PHPMailer-a) должен выглядеть примерно так:

    <?php
    class mail{
        private $smtp_data = array(
            "host" =>  'ЗАПОЛНИТЬ', // SMTP сервер
            "debug" => 0,   // Уровень логирования (0 выкл, 1 - вывод ошибок, 2- полный лог)
            "debugoutput"=>  'html',    //формат вывода лога, если включено логирование
            "auth" =>  true,    // Авторизация на сервере SMTP. Если ее нет - false
            "port" =>  ЗАПОЛНИТЬ,   // Порт SMTP сервера
            "username" =>  'ЗАПОЛНИТЬ', // Логин на SMTP сервере
            "password" =>  'ЗАПОЛНИТЬ', // Пароль на SMTP сервере
            "fromname" =>  'ЗАПОЛНИТЬ', // Отображаемое имя отправителя
            "replyto" =>  array(
                "address" => 'ЗАПОЛНИТЬ',   // адрес почты для ответа
                "name" =>  'ЗАПОЛНИТЬ'  //отображаемое имя владельца ящика
            ),
            "notification" => array(
                "address" =>  'ЗАПОЛНИТЬ',  // Почта оповещения админа (не оповещать оставить пустым)
                "name" =>  'ЗАПОЛНИТЬ'  //отображаемое имя владельца ящика
            ),
            "secure" =>  'ЗАПОЛНИТЬ',   // Тип шифрования. Например ssl или tls
            "charset" =>  'UTF-8',  //кодировка отправляемых писем
            "verify" =>  '0'    // Верификация сертификата. 0 -выкл, 1 - вкл (выключить при возникновении ошибок связанных с SSL сертификатами при отправке)
        );
        private $mail_content = array( 
            'title' =>  'ЗАПОЛНИТЬ',
            'header' =>  '',
            'footer' =>  ''
        );
        private function fullText($text)
        {
            if(!empty($text))
            {
                return $this-> mail_content['header'] . $text . $this->mail_content['footer'];
            }
            else
            {
                die("Отсутствует текст письма");
            }
        }
        public function send($message_data)
        {                
            require_once('C:/..ПУТЬ../PHPMailer/PHPMailerAutoload.php');                 
            $mail = new PHPMailer;
            $mail-> isSMTP();
            if($this-> smtp_data['verify'] == 0) {
                $mail-> SMTPOptions = array('ssl' => array(
                    'verify_peer' => false,
                    'verify_peer_name' => false,
                    'allow_self_signed' => true
                ));
            }
            $mail-> Host = $this-> smtp_data['host'];
            $mail-> SMTPDebug = $this -> smtp_data['debug'];
            $mail-> Debugoutput = $this-> smtp_data['debugoutput'];
            $mail-> SMTPAuth = $this-> smtp_data['auth'];
            $mail-> Port = $this-> smtp_data['port'];
            $mail-> Username = $this-> smtp_data['username'];
            $mail-> Password = $this-> smtp_data['password'];
            $mail-> SMTPSecure = $this-> smtp_data['secure'];
            $mail-> CharSet = $this-> smtp_data['charset'];
            $mail-> setFrom($this-> smtp_data['username'], 
            $this-> smtp_data['fromname']);
            $mail-> addReplyTo($this-> smtp_data['replyto']['address'], 
            $this-> smtp_data['replyto']['name']);
            if(!empty($this-> smtp_data['notification']['address'])) {
                $mail-> addAddress($this-> smtp_data['notification']['address'], 
                                   $this-> smtp_data['notification']['name']);
            }
            $mail-> addAddress($message_data['to'], $message_data['to_name']);
            $mail-> Subject = $this-> mail_content['title'];
            $mail-> msgHTML($this-> fullText($message_data['text']));
            $mail-> AltBody = strip_tags($this-> fullText($message_data['text']));
            if (!$mail-> send()) {
                die("Mailer Error: " . $mail-> ErrorInfo);
            } else {
                return 0;
            }
        }
    }
    

Удачи вам в решении задачи! Выглядит всё громоздко и трудно, но на самом деле достаточно легко. Гугл будет верным союзником при возникновении каких либо трудностей и вопросов на этапах выполнения описанных мною шагов. P.S.: Описанный мной способ подразумевает что у вас будет зарегистрирован почтовый ящик ДЛЯ ОТПРАВКИ ПИСЕМ на любом почтовом сервисе (google/mail/yandex/...) и письма будут отправляться с него при помощи PHP+PHPMailer на нужные e-mail адреса (в вашем случае это ваш собственный e-mail адрес)

Answer 2

В файле index.html

<form method="POST" action="send.php">
<input type="text" name="name">
<input type="text" name="mail">
<input type="submit">
</form>

Файл send.php

<?php
$subject = "Заголовок письма";
$text = $_POST['email']."\nТекст: ".$_POST['vopros'];
$address = "admin@stite.ru";    
mail($address, $subject, $text, 'Content-Type: text/plain; charset=utf-8');
echo "Отправлено";
READ ALSO
Интеграция 1с и php?

Интеграция 1с и php?

Кто сталкивался, интересует пример ответа 1с, стандартные варианты не подходят, делаю без логина и пароля, пробовал с проверкой

179
Наследование в Java (вопрос от новичка)

Наследование в Java (вопрос от новичка)

Не могу понять, почему код не работает

193
docker-compose: нет связи между контейнерами

docker-compose: нет связи между контейнерами

У меня есть три микросервиса, которые я запускаю в докере

329