Отправка email на PHP: Полное руководство по библиотеке PHPMailer

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Библиотека PHPMailer: профессиональная отправка email на PHP

Отправка электронных писем — одна из ключевых функций любого современного веб-приложения. Встроенная функция PHP mail() часто оказывается недостаточно гибкой и безопасной: она не поддерживает SMTP-аутентификацию, шифрование TLS/SSL, отправку HTML-писем с вложениями и не всегда корректно работает на общих хостингах. Решение этих проблем — библиотека PHPMailer, которая стала стандартом de facto для отправки email на PHP.

Что такое PHPMailer?

PHPMailer — это мощная и простая в использовании библиотека для отправки электронной почты из PHP-скриптов. Она поддерживает:

  • Отправку через SMTP-сервер (Gmail, Yandex, Mail.ru, корпоративная почта);
  • Шифрование TLS и SSL;
  • HTML-письма с вложениями (изображения, PDF, документы);
  • Кодировку UTF-8 и работу с любыми языками (русский, китайский и т.д.);
  • Альтернативный текст (plain-text) для почтовых клиентов без HTML;
  • Подпись DKIM и SPF для защиты от спама;
  • Работу через локальный sendmail или встроенный mail() в качестве fallback.

Установка PHPMailer

Самый простой способ — через Composer. В терминале выполните команду в корне вашего проекта:

composer require phpmailer/phpmailer

Если Composer не используется, можно скачать архив с GitHub и подключить файлы вручную:

require_once '/путь/к/PHPMailer/src/PHPMailer.php';
require_once '/путь/к/PHPMailer/src/SMTP.php';
require_once '/путь/к/PHPMailer/src/Exception.php';

Базовый пример отправки письма через SMTP Gmail

Рассмотрим минимальную настройку для отправки письма через SMTP-сервер Gmail. Обратите внимание: для работы потребуется создать пароль приложения в настройках аккаунта Google (или использовать менее безопасный вариант «доступа к ненадёжным приложениям»).

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

require 'vendor/autoload.php';

$mail = new PHPMailer(true);

try {
    // Настройки сервера
    $mail->SMTPDebug = SMTP::DEBUG_OFF;          // Отладка (0 - выкл, 2 - подробно)
    $mail->isSMTP();                             // Использовать SMTP
    $mail->Host       = 'smtp.gmail.com';        // SMTP сервер
    $mail->SMTPAuth   = true;                    // Включить аутентификацию
    $mail->Username   = 'your-email@gmail.com';  // SMTP логин
    $mail->Password   = 'your-app-password';     // SMTP пароль (пароль приложения)
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; // SSL
    $mail->Port       = 465;                     // Порт для SSL (587 для TLS)

    // Отправитель и получатель
    $mail->setFrom('from@example.com', 'Имя отправителя');
    $mail->addAddress('to@example.com', 'Имя получателя'); // Можно добавить несколько
    $mail->addReplyTo('reply@example.com', 'Ответить');

    // Вложения (опционально)
    $mail->addAttachment('/путь/к/файлу.pdf', 'Название.pdf');

    // Содержимое письма
    $mail->isHTML(true);                        // Формат HTML
    $mail->Subject = 'Привет от PHPMailer!';
    $mail->Body    = '<b>Это HTML-письмо</b> с русским текстом.';
    $mail->AltBody = 'Это альтернативный текст для почтовых клиентов без HTML.';

    $mail->send();
    echo 'Письмо отправлено успешно';
} catch (Exception $e) {
    echo "Ошибка: {$mail->ErrorInfo}";
}
?>

Отправка через Яндекс.Почту

Для Яндекс.Почты параметры меняются незначительно. Важно: в настройках почтового ящика необходимо разрешить доступ по протоколу IMAP/SMTP и создать пароль приложения (если включена двухфакторная аутентификация).

$mail->Host       = 'smtp.yandex.ru';
$mail->SMTPAuth   = true;
$mail->Username   = 'your-login@yandex.ru';
$mail->Password   = 'your-password-or-app-password';
$mail->                    

Рекомендаций