Php mailer не работает ( обратный связь )

218
12 апреля 2019, 11:10

ВОт все скриты, и еще не работает маска для телефона, я всё сделал по инструкции ,форма после отправки выдаёт вот такую ошибку Доступ запрещен!

handler.php

<?php
require_once __DIR__ . '/mailer/Validator.php';
require_once __DIR__ . '/mailer/ContactMailer.php';
if (!Validator::isAjax() || !Validator::isPost()) {
    echo 'Доступ запрещен!';
    exit;
}
$name = isset($_POST['name']) ? trim(strip_tags($_POST['name'])) : null;
$email = isset($_POST['email']) ? trim(strip_tags($_POST['email'])) : null;
$phone = isset($_POST['phone']) ? trim(strip_tags($_POST['phone'])) : null;
$message = isset($_POST['message']) ? trim(strip_tags($_POST['message'])) : null;
if (empty($name) || empty($email) || empty($phone) || empty($message)) {
    echo 'Все поля обязательны для заполнения.';
    exit;
}
if (!Validator::isValidEmail($email)) {
    echo 'E-mail не соответствует формату.';
    exit;
}
if (!Validator::isValidPhone($phone)) {
    echo 'Телефон не соответствует формату.';
    exit;
}
if (ContactMailer::send($name, $email, $phone, $message)) {
    echo htmlspecialchars($name) . ', ваше сообщение успешно отправлено.';
} else {
    echo 'Произошла ошибка! Не удалось отправить сообщение.';
}
exit;

а это СontacktMailer.php

<?php
use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
require_once __DIR__ . '/PHPMailer/src/Exception.php';
require_once __DIR__ . '/PHPMailer/src/PHPMailer.php';
require_once __DIR__ . '/PHPMailer/src/SMTP.php';
/**
 * Mailer: класс-хелпер, отправляет почту администратору
 */
class ContactMailer
{
    /**
     * E-mail отправителя
     * @var string
     */
    private static $emailFrom = 'Sheyhan1426@gmail.com';
    /**
     * E-mail получателя
     * @var string
     */
    private static $emailTo = 'Sheyhan1426@gmail.com';
    /**
     * Отправляет писмо, если письмо отправлено,
     * возвращает TRUE, в противном случае FALSE.
     * @param string $name
     * @param string $email
     * @param string $phone
     * @param string $message
     * @return boolean
     */
    public static function send($name, $email, $phone, $message)
    {
        // Формируем тело письма
        $body = "Имя: " . $name . "\nE-mail: " . $email . "\nТелефон: " . $phone . "\n\nСообщение:\n" . $message;
        // Создаем объект PHPMailer
        $mailer = new PHPMailer();
        // Настройки подключения
        $mailer->isSMTP();
        // Устанавливает хост почтового сервера (Mail.ru: smtp.mail.ru, Google: smtp.gmail.com)
        $mailer->Host = ' smtp.gmail.com';
        // Включает SMTP-авторизацию
        $mailer->SMTPAuth = true;
        // Логин или E-mail целиком
        $mailer->Username = self::$emailFrom;
        // Пароль от почтового ящика
        $mailer->Password = 'xxxxxxx';
        // Протокол соединения
        $mailer->SMTPSecure = 'ssl';
        // Порт для исходящаей почты
        $mailer->Port = '465';
        // Устанавливает кодировку
        $mailer->CharSet = 'UTF-8';
        // Устанавливает E-mail и имя отправителя
        $mailer->setFrom(self::$emailFrom, 'Имя отправителя');
        // Добавляет E-mail получателя
        $mailer->addAddress(self::$emailTo);
        // Настройка HTML-формата
        $mailer->isHTML(false);
        // Тема письма
        $mailer->Subject = 'Заполнена форма обратной связи';
        // Основное тело письма
        $mailer->Body = $body;
        // Отправляет письмо
        if ($mailer->send()) {
            return true;
        }
        return false;
    }
}

a это Validator.php

<?php
/**
 * Validator: класс-хелпер, валидацирует данные пришедшие от пользователя
 */
class Validator
{
    /**
     * Проверяет валидный ли E-mail, если да, то
     * возвращает TRUE, в противном случае FALSE.
     * @param string $email
     * @return boolean
     */
    public static function isValidEmail($email)
    {
        return filter_var($email, FILTER_VALIDATE_EMAIL);
    }
    /**
     * Проверяет валидный ли E-mail, если да, то
     * возвращает TRUE, в противном случае FALSE.
     * @param string $phone
     * @return boolean
     */
    public static function isValidPhone($phone)
    {
        return preg_match("#\+7 \(\d{3}\) \d{3}\-\d{2}-\d{2}#", $phone);
    }
    /**
     * Проверяет пришли ли данные POST-запросом, если да,
     * то возвращает TRUE, в противном случае FALSE.
     * @return boolean
     */
    public static function isPost()
    {
        return $_SERVER['REQUEST_METHOD'] === 'POST';
    }
    /**
     * Проверяет пришли ли данные Ajax-запросом, если да,
     * то возвращает TRUE, в противном случае FALSE.
     * @return boolean
     */
    public static function isAjax()
    {
        return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest';
    }
}

вот Main.js

jQuery(document).ready(function($) {
    // Добавляем маску для поля с номера телефона
    $('#phone').mask('+7 (999) 999-99-99');
    // Проверяет отмечен ли чекбокс согласия
    // с обработкой персональных данных
    $('#check').on('click', function() {
        if ($("#check").prop("checked")) {
            $('#button').attr('disabled', false);
        } else {
            $('#button').attr('disabled', true);
        }
    });
    // Отправляет данные из формы на сервер и получает ответ
    $('#contactForm').on('submit', function(event) {
        event.preventDefault();
        var form = $('#contactForm'),
            button = $('#button'),
            answer = $('#answer'),
            loader = $('#loader');
        $.ajax({
            url: 'handler.php',
            type: 'POST',
            data: form.serialize(),
            beforeSend: function() {
                answer.empty();
                button.attr('disabled', true).css('margin-bottom', '20px');
                loader.fadeIn();
            },
            success: function(result) {
                loader.fadeOut(300, function() {
                    answer.text(result);
                });
                form.find('.form-control').val('');
                button.attr('disabled', false);
            },
            error: function() {
                loader.fadeOut(300, function() {
                    answer.text('Произошла ошибка! Попробуйте позже.');
                });
                button.attr('disabled', false);
            }
        });
    });
});

index.html

<!-- Modal -->
  <div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
    <div class="modal-dialog" role="document">
      <div class="modal-content">
        <div class="modal-header">
          <h5 class="modal-title" id="exampleModalLabel">Мы свяжемся с вами в ближайшее время</h5>
          <button type="button" class="close" data-dismiss="modal" aria-label="Close">
            <span aria-hidden="true">&times;</span>
          </button>
        </div>
        <div class="modal-body">
          <form id="contactForm" action="handler.php" method="post">
      <div class="field-block">
        <label for="name">Ваше имя:</label>
        <input id="name" class="field" name="name" required type="text" placeholder="Иванов Иван Иванович">
      </div>
      <div class="field-block">
        <label for="email">Ваш E-mail:</label>
        <input id="email" class="field" name="email" required type="email" placeholder="ivanov@email.com">
      </div>
      <div class="field-block">
        <label for="phone">Ваш телефон:</label>
        <input id="phone" class="field" name="phone" required type="text" placeholder="+7 (800) 000-00-00">
      </div>
      <div class="field-block">
        <label for="message">Текст сообщения:</label>
        <textarea id="message" class="field" required name="message" rows="4"></textarea>
      </div>
      <div class="field-block">
        <input id="check" name="check" checked type="checkbox">
        <span class="check-text">Я добровольно отправляю свои данные</span>
      </div>
      <button id="button" class="button" type="submit">Отправить</button>
      <div class="result">
        <span id="answer"></span>
        <span id="loader"><img src="images/loader.gif" alt=""></span>
      </div>
    </form>

Пожалуйста Помогите! я уже 3 дня не могу настроить сайт!

READ ALSO
прошу объяснить, как так получилось?

прошу объяснить, как так получилось?

тогда откуда $m0 = $m % 10 PHP выдаст двухзначное число?

212
Очень медленно выполняется простейший SELECT запрос

Очень медленно выполняется простейший SELECT запрос

Есть простая таблица с двумя полями - text и pathnameВ первом поле хранится текст (в среднем 2000 символов), а во втором - URL запрошенной страницы

213
Не перетираемые записи в memcached

Не перетираемые записи в memcached

Судя по документации Memcached в PHP, объекты записываются в память и хранятся там до тех пор, пока:

183