Компоненты

Отправка данных формы на почту

Скачать компонент

В архиве лежат следующие файлы и папки:

PHPMailer

Папка с php библиотекой для отправки данных формы на почту. Папка переносится в корень проекта. В неё не нужно вносить изменения

send.php

Редактируемый файл, для настройки отправки данных формы

В папке js расположена кастомная валидация лиги. В неё добавлены файлы:

send-mail.js

Запрос на отправку данных с формы. Редактировать не нужно

form-send-callbacks.js

колбеки успешной или не успешной отправки данных формы

Причины сбоя отправки писем

  1. Проблемы на хостинге (возможно перезапускали сервер, возможно меняли конфигурации)

  2. Спам (хостинг заблокировал возможность отправки писем посчитав что вы спамите)

  3. Частые рассылки писем и уведомлений (сайт отправляет очень много уведомлений, очень часто для отправки используется стандартный системный транспорт и php функция mail, для отправки писаем используется почтовый сервер вашего хостинг провайдера, это не требует дополнительных настроек, но обычно почтовые хостинги провайдера не любят нагрузок как следствие письма могут попадать в спам, не отправляться)

  4. Конфликты на сайте (из-за установленных плагинов)

Варианты решений

  1. Деактивировать по очереди плагины если это WordPress

  2. Обратиться в службу поддержки хостинга

  3. Создать на хостинге корпоративную почту и указать её в настройках сайта

  4. Настроить отправку писем через SMTP-сервер с авторизацией

Мы будем использовать 4 вариант, он является самым надёжным. Важно понимать, что тот адрес, на который должны приходить письма не имеет никакого значения, он может быть любым. Все настройки осуществляются для почтового сервера с которого будет отправляться письмо.

В зависимости от того с какого почтового сервера мы хотим отправлять письма, мы должны создать нужные нам настройки.

Пример для gmail

  1. SMTP сервер, зависит от почты отправки:

    $mail->Host = "smtp.yandex.ru";

  2. Включаем SMTP авторизацию:

    $mail->SMTPAuth = true;

  3. SMTP имя пользователя (почта с которой отправляем письмо):

    $mail->Username = "ligaatest@yandex.ru";

  4. SMTP password (для яндех и мэйл ру генерируем по ссылке в инструкции, для gmail это пароль от почты):

    $mail->Password = "skfbddoaxyeiqglc";

  5. SMTP Шифрование в основном это ssl, если другое не указанно настройках сервера:

    $mail->SMTPSecure = "ssl";

  6. Порт:

    $mail->Port = 465;

  7. Почта откуда отправляем:

    $mail->setFrom("ligaatest@yandex.ru");

  8. Почта на которую должны приходить письма:

    $mail->addAddress("ligamailtest@gmail.com");

От заказчика нам нужно узнать пункты 1, 3, 4, 7, 8. Так же он должен настроить почту по ссылкам ниже. Всю остальную информацию мы можем найти сами.

Ссылка на настройки yandex.ru Настройка Яндекс почты

Ссылка на настройки mail.ru Настройка mail.ru

Ссылка на настройки gmail.com Настройка gmail

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

Для остальных почтовых серверов настройки легко гуглятся пример запроса «настройка smtp «название почтового сервера»

Для тестирования нужно установить программу ospanel.io

Инструкция для разработчика

  1. Записать в переменные все используемые поля Скриншот

  2. Настроить сервер Скриншот

  3. Добавить адреса откуда приходят письма и куда Скриншот

  4. Настроить отображение письма Скриншот

  5. Добавить отправку в колбек успешной валидации Скриншот

  6. Добавить функции для реализации колбеков успешной отправки и ошибки отправки Скриншот

Если требуется формировать письма с разных форм то мы просто создаём ещё php файлы с другими настройками. Не забываем указывать эти файлы в атрибуте action формы Скриншот

Создание шаблона письма, добавление скрытых инпутов

В компонент был добавлен файл send-template.php

Периодически возникает задача, как-либо кастомизировать письма в зависимости от формы из которой они отправлены. Для этого мы используем скрытые инпуты (input type="hidden"). Для него так же обязательно указание атрибута name="" по которому осуществляется поиск в php файле. В атрибуте value="" мы указываем нужную нам информацию которую будем добавлять при формировании тела письма. Ссылки на изображения должны быть исключительно абсолютными.

// pug
input(type="hidden", name="user-hidden-img", value="https://wallbox.ru/resize/1024x1024/wallpapers/main/201627/934e473b906f243.jpg")
input(type="hidden", name="user-hidden-text", value="Скрытый текст с тестового сайта")
// php
$userHiddenImg = $_POST['user-hidden-img'];
$userHiddenText = $_POST['user-hidden-text'];

Стили в отправляемом писме можно только инлайнить.

// Шаблон письма
$mailTemplate = "
  <div style='background-color: darkgray;'>
    <img src='$userHiddenImg' style='width: 200px; height: 200px;  object-fit: cover;'>
    <p>$userHiddenText.</p>
    <p style='color: red; font-family: arial, helvetica, sans-serif; font-size: 30px; line-height: 120%;'>Имя: $userName.</p>
    <p>Телефон: $userPhone.</p>
    <p>Почта: $userEmail.</p>
  </div>
";