Вменяемая инструкция к PHPMailer “Отправка писем и файлов на почту”

PHPMailer обновился и инструкция к прошлой версии не актуальна, хотя вы также можете использовать прикреплённые файлы в той инструкции. Работать будет.

Прошло несколько лет, но у вас всё также нет выхода, и PHPMAILER — это самый простой способ отправлять со своего сайта письма на почту.

Вот что вы можете получить в итоге. Пощупать: /https://jsfiddle.net/dzLh63oe/

О чем эта инструкция.

Это инструкция по добавлению на ваш сайт PHPMailer и отправки писем с прикреплёнными файлами к вам на почту без перезагрузки страницы.

Здесь будет инструкция для более простой базовой версии формы, без анимации и валидаций на чистом JavaScript. Навороченную версию формы (та, что на картинке) вы можете скачать по ссылке в конце статьи.

1. Скачиваем PHPMailer

Переходим на сайт https://github.com/PHPMailer/PHPMailer и скачиваем последнюю версию

В начале кликаем по “Clone or Download”, затем по “Download ZIP”

Во всём архиве нам нужны только 3 файла:

PHPMailer\src\PHPMailer.php
PHPMailer\src\SMTP.php
PHPMailer\src\Exception.php

Всё остальное, что хранится на Github — на*уй не нужно, можете удалять.

2. Удаляем из файлов весь хлам

Этот пункт вы можете пропустить. Он не является обязательным

Файлы, написанные разработчиками PHPMailer, содержат немереное количество мусора, состоящего из одних комментариев (зачем?!). Вес этих трёх файлов вместе с комментариями равен 196кб, после удаления комментов вес составит 72кб. Почти в 3 раза…

Я предлагаю удалить все комментарии в файлах с помощью какого-нибудь “PHP минификатора”. Можете использовать любой, я взял (первый попавшийся) http://php-minify.com

  1. Открываете файл PHPMailer.php
  2. Копируете содержимое файла
  3. Вставляете в форму на сайте php-minify и жмёте “COMPRESS”
  4. Результат пересохраняете в новом файле с тем же названием

Процедуру повторяете со всеми тремя файлами.

Для наглядности файл Exception.php

Слева файл до сжатия, справа он же после удаления мусора

3. Перемещаем файлы в проект

И теперь помещаем эти 3 файла в наш проект. Я создал специально для этих файлов папку под названием phpmailer

4. Создаём файл конфигурации

Создадим файл send.php с таким содержанием

Здесь вам нужно отредактировать эти поля под себя:

// Формирование самого письма
$title = "Заголовок письма";
$body = "Само письмо"
// Настройки вашей почты
$mail->Host = 'smtp.yandex.ru'; // SMTP сервера вашей почты
$mail->Username = 'your_login'; // Логин на почте
$mail->Password = 'password'; // Пароль на почте
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;
// Адрес самой почты и имя отправителя
$mail->setFrom('mail@yandex.ru', 'Имя отправителя');
// Получатель письма
$mail->addAddress('youremail@yandex.ru');
$mail->addAddress('youremail@gmail.com'); // Ещё один, если нужен

Нужно использовать не пароль от самой почты, а “Пароль приложения”. В настройках вашей почты, будь то Gmail, Yandex или Mailru— есть раздел “Пароли приложений”, где вы можете специально создать отдельный сгенерированный пароль для PHPMailer.

Сохраняем этот файл send.php и помещаем его в корень сайта

В примере указаны настройки для Яндекса. Вы можете использовать любую почту для отправки. Для изменения почты отправки, к примеру, на Gmail — нужно изменить эти поля:

$mail->Host = ‘smtp.gmail.com’; // SMTP сервер
$mail->SMTPSecure = ‘ssl’; // шифрование
$mail->Port = 465; // Порт

5. Создаём HTML форму

Теперь поместим эту форму в нужное место на вашем сайте

Обратите внимание на onsubmit. Там вторым аргументом должно быть указано имя файла, то есть send.php.

6. Прописываем JavaScript

Нужно теперь просто где-то в коде разместить эту функцию. Вы можете её скопировать в свой script файл, который уже подключён в <head>, либо вставить его после закрывающего тега </body>.

7. Всё (почти)

Форма у вас должна выглядеть вот так:

И в случае успеха (или неудачи) вы должны получить всплывающее сообщение от браузера, мол “Сообщение отправлено” или “Ошибка…”.

8. Почему ошибка?

Это очень частый вопрос, где я с полной уверенностью могу сказать: 60% причин ошибок — это ваш хостинг, 30% — ваша почта, 9% — вы неверно указали данные от почты, а 1% причин —ты, сука, даун, который решил изменить код, а потом начинаешь искренне удивляться, почему ничерта не работает.

Чтобы узнать, в чём причина, нужно раскомментировать вот эту строчку кода (убрать //):

//$mail->SMTPDebug = 2

Теперь в браузере нужно открыть консоль (F12) > вкладка “console” и отправить сообщение. У вас должна появиться новая строчка (список), которую нужно раскрыть:

Причина: Error: authentication failed: Invalid user or password! , то есть неверно указаны данные почты.

Если для вас эти строчки, как иероглифы, и уверены, что ошибки в написании данных почты нет, то отправляете два письма: одно в тех.поддержку вашего хостинга, второе в тех.поддержку вашей почты с таким содержанием:

Привет. Пытаюсь настроить PHPMailer, но в логах у меня ошибка:
*СЮДА ВСТАВЛЯЕТЕ ЭТИ СТРОЧКИ ИЗ КОНСОЛИ*

Через некоторое время они ответят и письма начнут нормально уходить.

После того, настоятельно рекомендую снова закомментировать строчку c $mail->SMTPDebug = 2

9. Скачать готовые файлы

Чистая базовая форма без выеб*нов: Скачать

Форма с валидацией почты и анимацией GSAP: Скачать

Настройки для других почт: https://snipp.ru/view/146

У этой формы есть минус: нет защиты от спама. Каптчу вам нужно отдельно подключать

Спасибо за внимание

И жмите на “Ладошки” (claps), чтоб поставить лайк

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store