Библиотека 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->