Отправка почты из PHP через SMTP

Дмитрий Корнев
18 сентября 2019

Штатная функция mail в PHP не имеет возможности отправлять почту через SMTP. В старых сайтовых движках по этому поводу тоже не заморачивались. Благо, такой функционал можно легко добавить при помощи готового модуля PHPMailer. Этот способ лучше и проще, чем настраивать на веб-сервере Exim.

Установка:

composer require phpmailer/phpmailer

Пример кода, который можно заточить под свои нужды:

<?php

// Импортируем классы PHPMailer в глобальное пространство имен
// Они должны быть вверху вашего скрипта, а не внутри функции
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

// Подключение модулей Composer
require '/home/username/vendor/autoload.php';

$mail = new PHPMailer(true);                                // Параметр 'true' разрешает модель исключений

try {
    // Параметры SMTP-сервера
    //$mail->SMTPDebug = 2;                                 // Раскомментируйте для вывода отладочной информации
    $mail->isSMTP();                                        // Указываем, что модуль будет работать в режиме SMTP
    $mail->Host = 'smtp.yandex.ru';                         // Адрес сервера SMTP
    $mail->SMTPAuth = true;                                 // Включение аутентификации SMTP
    $mail->Username = 'mail@mydomen.com';                   // Адрес полностью, если используется почта для домена.
    $mail->Password = 'Пароль';
    $mail->SMTPSecure = 'tls';                              // Включение шифрования TLS, как вариант можно 'ssl'
    $mail->Port = 587;                                      // TCP-порт, для Яндекса работает именно такой

    // Получатели
    $mail->setFrom('no-reply@mydomen.com', 'Robot');        // Отправитель
    $mail->addAddress('user@example.com', 'User Name');     // Добавление получателя, в таком виде можно указать несколько
    //$mail->addAddress('contact@example.com');             // Имя можно не указывать
    //$mail->addReplyTo('info@example.com', 'Info');
    //$mail->addCC('cc@example.com');
    //$mail->addBCC('bcc@example.com');

    // Вложенные файлы
    //$mail->addAttachment('/var/tmp/file.tar.gz');         // Добавление файла, в таком виде можно указать несколько
    //$mail->addAttachment('/tmp/image.jpg', 'new.jpg');    // Имя можно не указывать

    // Контент письма
    $mail->CharSet = 'UTF-8';                               // Кодировка для всех текстов
    $mail->isHTML(true);                                    // Включение HTML-формата
    $mail->Subject = 'Тема письма';
    $mail->Body    = 'Текст самого письма';
    //$mail->AltBody = 'Вариант текста письма для почтовых программ, не поддерживающих HTML';

    // Отправка
    $mail->send();
    echo 'Письмо отправлено';

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

 

Комментарии