Как на PHP реализовать отправку почты через SMTP сервер (например, Gmail или Mail.ru (http://mail.ru/)), используя библиотеку PHPMailer?

PHPMailer — одна из самых популярных библиотек для отправки электронной почты на PHP. Она поддерживает SMTP-аутентификацию, SSL/TLS-шифрование и позволяет легко отправлять письма через внешние почтовые серверы, такие как Gmail или Mail.ru.

## Установка PHPMailer

Рекомендуется устанавливать через Composer:

bash
composer require phpmailer/phpmailer

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

## Отправка через Gmail

php
isSMTP();
$mail->Host = ‘smtp.gmail.com’;
$mail->SMTPAuth = true;
$mail->Username = ‘your_email@gmail.com’;
$mail->Password = ‘your_app_password’; // Пароль приложения
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = 587;

$mail->setFrom(‘your_email@gmail.com’, ‘Ваше Имя’);
$mail->addAddress(‘recipient@example.com’, ‘Получатель’);

$mail->isHTML(true);
$mail->Subject = ‘Тема письма’;
$mail->Body = ‘Текст письма в HTML‘;
$mail->AltBody = ‘Текст письма в обычном формате’;

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

> **Важно для Gmail:** начиная с 2022 года Google отключил поддержку «менее безопасных приложений». Необходимо использовать **пароль приложения** (App Password), который создаётся в настройках аккаунта Google при включённой двухфакторной аутентификации.

## Отправка через Mail.ru

php
$mail->isSMTP();
$mail->Host = ‘smtp.mail.ru’;
$mail->SMTPAuth = true;
$mail->Username = ‘your_email@mail.ru’;
$mail->Password = ‘ваш_пароль’;
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
$mail->Port = 465;

Для Mail.ru используется порт **465** с шифрованием **SSL (SMTPS)**. Убедитесь, что в настройках почтового ящика Mail.ru включён доступ по протоколу SMTP.

## Дополнительные возможности PHPMailer

— **Вложения:** `$mail->addAttachment(‘/path/to/file.pdf’);`
— **Копия (CC):** `$mail->addCC(‘cc@example.com’);`
— **Скрытая копия (BCC):** `$mail->addBCC(‘bcc@example.com’);`
— **Reply-To:** `$mail->addReplyTo(‘reply@example.com’);`
— **Встроенные изображения:** `$mail->addEmbeddedImage(‘image.jpg’, ‘myimage’);`

## Отладка

Для диагностики ошибок включите режим отладки:

php
$mail->SMTPDebug = 2; // 0 — выкл, 1 — клиент, 2 — клиент+сервер

Это выведет подробный лог SMTP-диалога, что поможет быстро найти причину проблемы.

## Советы по безопасности

— Никогда не храните логин и пароль прямо в коде — используйте `.env`-файлы или переменные окружения.
— Используйте библиотеку `vlucas/phpdotenv` для загрузки конфигурации из `.env`.
— Регулярно обновляйте PHPMailer до последней версии.


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.