Отправить письмо через почтовой сервер (SMTP)

Отправлять письма через почтовой сервер, например, через «Яндекс.Почта», можно по протоколу SMTP.

Рекомендуется использовать данный способ, т.к. это поможет избежать попадания в спам соощений, отправляемых напрямую через сайт.

Сначала надо установить библиотеку PHPMailer. Устанавливается библиотека через composer (установку composer можно прочитать на странице установка Yii).

Ссылка на библиотеку: https://github.com/PHPMailer/PHPMailer

composer require phpmailer/phpmailer

Код отправки

require 'vendor/autoload.php';

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

$mail = new PHPMailer(true);

try {
    $mail->isSMTP();          // Отправить через SMTP
    $mail->SMTPAuth = true;
    $mail->CharSet = 'UTF-8'; // Кодировка письма

    // Почтовой сервер, с которого будет отправляться письма
    $mail->Host       = 'ssl://smtp.yandex.ru';
    $mail->Username   = 'login@yandex.ru';
    $mail->Password   = 'password';
    $mail->Port       = 465;

    $mail->setFrom('login@yandex.ru', 'Name'); // От кого
    $mail->addAddress('address@yandex.ru');    // Кому
    $mail->isHTML(true);                       // Отправлять как HTML
    $mail->Subject = 'Тема письма';
    $mail->Body    = 'HTML-контент письма';

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

Код выше отправляет письмо через «Яндекс.Почта», используя аккаунт «login@yandex.ru».

Также можно использовать другие почтовые сервисы:

// Яндекс.Почта
$mail->Host = 'ssl://smtp.yandex.ru';
$mail->Port = 465;
$mail->Username = 'логин@yandex.ru';
$mail->Password = 'пароль'; // создаётся отдельно в настройках аккаунта

// Mail.ru
$mail->Host = 'ssl://smtp.mail.ru';
$mail->Port = 465;
$mail->Username = 'логин@mail.ru';
$mail->Password = 'пароль'; // создаётся отдельно в настройках аккаунта

// GMail
$mail->Host = 'ssl://smtp.gmail.com';
$mail->Port = 465;
$mail->Username = 'логин@gmail.com';
$mail->Password = 'пароль';