PHPMailer для PHP: полное руководство с примерами

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

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

Начать курс

Что такое PHPMailer и зачем он нужен?

PHPMailer — это одна из самых популярных и мощных библиотек для отправки электронных писем на языке PHP. Она предоставляет простой, но в то же время гибкий интерфейс для работы с протоколами SMTP, POP3 и IMAP. В отличие от стандартной функции PHP mail(), PHPMailer предлагает множество преимуществ:

  • Поддержка SMTP-аутентификации — безопасная отправка через внешние почтовые серверы (Gmail, Yandex, Mail.ru, собственный SMTP-сервер).
  • Работа с HTML-письмами — создание красивых, форматированных писем с изображениями и стилями.
  • Вложения — возможность прикреплять файлы любого типа.
  • Поддержка UTF-8 — корректная работа с кириллицей и другими языками.
  • Защита от заголовочных инъекций — безопасность вашего приложения.
  • Поддержка различных кодировок — Base64, Quoted-Printable и другие.
  • Работа с CC и BCC — скрытые и открытые копии.

Библиотека используется в тысячах проектов по всему миру, включая такие CMS, как WordPress, Drupal и Joomla. Если вам нужно отправлять письма из PHP-приложения — будь то регистрационные уведомления, сброс пароля, рассылки или коммерческие предложения — PHPMailer станет вашим незаменимым инструментом.

Установка PHPMailer

PHPMailer устанавливается через Composer — менеджер зависимостей для PHP. Если у вас ещё нет Composer, установите его с официального сайта getcomposer.org.

Откройте терминал в корневой папке вашего проекта и выполните команду:

composer require phpmailer/phpmailer

После успешной установки в вашем проекте появится папка vendor и файл composer.json. Для подключения библиотеки в PHP-скрипте используйте автозагрузчик Composer:

require 'vendor/autoload.php';

Если вы не используете Composer, можно скачать библиотеку вручную с GitHub и подключить её через require_once, но настоятельно рекомендуется использовать Composer для автоматического управления зависимостями.

Быстрый старт с примером кода

Давайте отправим наше первое письмо с помощью PHPMailer. В этом примере мы используем SMTP-сервер Gmail. Убедитесь, что у вас включён доступ к менее защищённым приложениям или используйте пароль приложения (App Password) для двухфакторной аутентификации.

<?php
// Подключаем автозагрузчик Composer
require 'vendor/autoload.php';

// Импортируем классы PHPMailer
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

// Создаём экземпляр PHPMailer
$mail = new PHPMailer(true);

try {
    // Настройки сервера
    $mail->SMTPDebug = SMTP::DEBUG_OFF; // Отключаем отладку (для продакшена)
    $mail->isSMTP();                     // Используем SMTP
    $mail->Host       = 'smtp.gmail.com'; // SMTP-сервер
    $mail->SMTPAuth   = true;            // Включаем аутентификацию
    $mail->Username   = 'your_email@gmail.com'; // Ваш email
    $mail->Password   = 'your_password';        // Ваш пароль или пароль приложения
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; // Шифрование SSL
    $mail->Port       = 465;             // Порт для SSL

    // Отправитель и получатель
    $mail->setFrom('your_email@gmail.com', 'Ваше Имя');
    $mail->addAddress('recipient@example.com', 'Имя Получателя');

    // Контент письма
    $mail->isHTML(true); // Устанавливаем формат HTML
    $mail->Subject = 'Тестовое письмо от PHPMailer';
    $mail->Body    = '<h1>Привет!</h1><p>Это тестовое письмо, отправленное с помощью <b>PHPMailer</b>.</p>';
    $mail->AltBody = 'Привет! Это тестовое письмо, отправленное с помощью PHPMailer.';

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

Этот код создаёт простое HTML-письмо и отправляет его через Gmail. Обратите внимание на блок try-catch — он перехватывает исключения и выводит информацию об ошибке.

Основные методы и функции PHPMailer

Рассмотрим 10 ключевых методов библиотеки, которые покроют 90% ваших задач.

1. isSMTP()

Что делает: Указывает PHPMailer использовать SMTP-протокол для отправки. Это основной метод для работы с внешними почтовыми серверами.

Параметры: Нет.

Пример:

$mail->isSMTP();

2. setFrom($address, $name = '')

Что делает: Устанавливает отправителя письма. Первый параметр — email-адрес, второй (необязательный) — имя отправителя.

Параметры:

  • $address (string) — Email отправителя.
  • $name (string) — Имя отправителя (по умолчанию пустая строка).

Пример:

$mail->setFrom('noreply@mysite.com', 'Мой Сайт');

3. addAddress($address, $name = '')

Что делает: Добавляет получателя письма. Можно вызывать несколько раз для добавления нескольких получателей.

Параметры:

  • $address (string) — Email получателя.
  • $name (string) — Имя получателя (по умолчанию пустая строка).

Пример:

$mail->addAddress('user1@example.com', 'Иван Иванов');
$mail->addAddress('user2@example.com'); // Только email

4. addReplyTo($address, $name = '')

Что делает: Устанавливает адрес для ответа на письмо. Если получатель нажмёт "Ответить", письмо уйдёт на этот адрес, а не на адрес отправителя.

Параметры:

  • $address (string) — Email для ответа.
  • $name (string) — Имя (по умолчанию пустая строка).

Пример:

$mail->addReplyTo('support@mysite.com', 'Поддержка');

5. addCC($address, $name = '')

Что делает: Добавляет получателя в копию (Carbon Copy). Все получатели будут видеть, кому ещё отправлено письмо.

Параметры: Аналогично addAddress().

Пример:

$mail->addCC('manager@example.com', 'Менеджер');

6. addBCC($address, $name = '')

Что делает: Добавляет получателя в скрытую копию (Blind Carbon Copy). Другие получатели не увидят этот адрес.

Параметры: Аналогично addAddress().

Пример:

$mail->addBCC('secret@example.com');

7. addAttachment($path, $name = '', $encoding = 'base64', $type = '', $disposition = 'attachment')

Что делает: Прикрепляет файл к письму. Можно прикрепить несколько файлов, вызывая метод несколько раз.

Параметры:

  • $path (string) — Путь к файлу на сервере.
  • $name (string) — Имя файла в письме (по умолчанию — оригинальное имя).
  • $encoding (string) — Кодировка (по умолчанию base64).
  • $type (string) — MIME-тип (по умолчанию определяется автоматически).
  • $disposition (string) — Тип вложения (attachment или inline).

Пример:

$mail->addAttachment('/path/to/file.pdf', 'Документ.pdf');
$mail->addAttachment('/path/to/image.jpg');

8. isHTML($isHtml = true)

Что делает: Указывает, что тело письма содержит HTML-разметку. Если установить false, письмо будет отправлено как обычный текст.

Параметры:

  • $isHtml (bool) — true (HTML) или false (plain text).

Пример:

$mail->isHTML(true);

9. Subject (свойство)

Что делает: Устанавливает тему письма. Это не метод, а публичное свойство класса.

Параметры: Строка с темой.

Пример:

$mail->Subject = 'Подтверждение регистрации';

10. Body и AltBody (свойства)

Что делает:

  • $mail->Body — Основное тело письма (HTML или текст).
  • $mail->AltBody — Альтернативный текст для почтовых клиентов, которые не поддерживают HTML.

Пример:

$mail->Body = '<h1>Привет!</h1><p>Это HTML-письмо.</p>';
$mail->AltBody = 'Привет! Это текстовая версия письма.';

11. send()

Что делает: Отправляет письмо. Возвращает true в случае успеха, иначе выбрасывает исключение.

Параметры: Нет.

Пример:

if ($mail->send()) {
    echo 'Письмо отправлено!';
} else {
    echo 'Ошибка: ' . $mail->ErrorInfo;
}

12. SMTPDebug (свойство)

Что делает: Включает или отключает отладочный вывод SMTP-сессии. Полезно для диагностики проблем.

Значения:

  • SMTP::DEBUG_OFF (0) — Отключить отладку.
  • SMTP::DEBUG_CLIENT (1) — Вывод команд клиента.
  • SMTP::DEBUG_SERVER (2) — Вывод команд сервера и клиента.
  • SMTP::DEBUG_CONN

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