Штатная функция 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;
}