Задать вопрос

Отправка писем PHP, что я делаю не так?

Всем привет! Подскажите, что я делаю не так?
Хочу написать один универсальный класс для отправки писем на почту, в телеграм, а потом и в CRM, но пока задача стоит отправить только на почту. Этот класс должен уметь принимать все формы сразу. По умолчанию все должно работать примерно так:
1. Не все поля обязательны для заполнения
2. Проверяем пришло, что-то в $_POST или нет
3. Если пришло записываем в свойства, по умолчанию свойства = null, так как не все они могут быть заполнены.
4. Данные, которые пришли записываем в свойства класса.
5. Затем поочередно будем вызывать методы на отправку в почту, телеграм, CRM.

---- На стоанице с формами подключаю так :
<?php require_once('mail.php'); ?>

или отправляю через AJAX:

$(document).ready(function () {
    $("form").submit(function () {
        // Получение ID формы
        var formID = $(this).attr('id');
        // Добавление решётки к имени ID
        var formNm = $('#' + formID);
        var message = $(formNm).find(".msgs"); // Ищет класс .msgs в текущей форме  и записываем в переменную
        var formTitle = $(formNm).find(".formTitle"); // Ищет класс .formtitle в текущей форме и записываем в переменную
        $.ajax({
            type: "POST",
            //url: 'modalform/mail.php',
            url: 'mail.php',
            data: formNm.serialize(),
            success: function (data) {
                // Вывод сообщения об успешной отправке
                message.html(data);
                formTitle.css("display","none");
                setTimeout(function(){
                    //$(formNm).css("display","block");
                    $('.formTitle').css("display","block");
                    $('.msgs').html('');
                    $('input').not(':input[type=submit], :input[type=hidden]').val('');
                }, 3000);
            },
            error: function (jqXHR, text, error) {
                // Вывод сообщения об ошибке отправки
                message.html(error);
                formTitle.css("display","none");
                // $(formNm).css("display","none");
                setTimeout(function(){
                    //$(formNm).css("display","block");
                    $('.formTitle').css("display","block");
                    $('.msgs').html('');
                    $('input').not(':input[type=submit], :input[type=hidden]').val('');
                }, 3000);
            }
        });
        return false;
    });
    //для стилей формы
    var $input = $('.form-fieldset > input');
    $input.blur(function (e) {
        $(this).toggleClass('filled', !!$(this).val());
    });
});


Код класса:
<?php

class Mail {

    public $name = strip_tags($_POST['name']);
    public $phone = null;
    public $email = null;
    public $phone_email = null;
    public $website = null;
    public $message = null;
    public $formInfo = null;

    public function __construct(){

            if(!isset($_POST)) {

            $this->name =  strip_tags($_POST['name']);
            $this->phone =  strip_tags($_POST['phone']);
            $this->email =  strip_tags($_POST['email']);
            $this->phone_email =   strip_tags($_POST['phone_email']);
            $this->website =   strip_tags($_POST['website']);
            $this->message =   strip_tags($_POST['message']);
            $this->formInfo =   strip_tags($_POST['$formInfo']);
            $startmail = new Mail($_POST);
            $startmail->sendmail();
        }


    }


    public function sendmail () {

        $to = "seotapki@yandex.ru"; /*Укажите адрес, на который должно приходить письмо*/
        $sendfrom = "info@site.ru"; /*Укажите адрес, с которого будет приходить письмо */
        $headers  = "From: " . strip_tags($sendfrom) . "\r\n";
        $headers .= "Reply-To: ". strip_tags($sendfrom) . "\r\n";
        $headers .= "MIME-Version: 1.0\r\n";
        $headers .= "Content-Type: text/html;charset=utf-8 \r\n";
        $headers .= "Content-Transfer-Encoding: 8bit \r\n";
        $subject = "$this->formInfo";
        $message = "$this->name
                    $this->phone
                    $this->email
                    $this->phone_email
                    $this->formInfo
                    $this->message
                    $this->website
                    ";

        $send = mail ($to, $subject, $message, $headers);

        if ($send){
            echo '<p class="fail">Сообщение успешно отправлено!</p>';
        } else {
            echo '<p class="fail">Ошибка. Вы заполнили не все обязательные поля!</p>';


    }







}


но что-то не так, всеравно не работает, что не так? почему не срабатывает метод

$startmail->sendmail();
  • Вопрос задан
  • 308 просмотров
Подписаться 1 Простой 8 комментариев
Пригласить эксперта
Ответы на вопрос 1
Wohlstand
@Wohlstand
Инженер-программист С++
Я рекомендую не использовать функцию mail() вообще, а использовать вместо неё прямое SMTP-соединение через сокеты. Как буду на работе, подгоню скрипт-пример.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы