Отправка писем с сайта через SMTP на PHP
По наблюдениям в последнее время письма, отправляемые с сайтов через функцию mail() часто попадают в СПАМ, блокируется на хостинге или просто совсем не доходят до адресатов.
Довольно часто бывает так, что письма с сайта доходят то почтовый ящиков, заведённых на сайтах, но не приходят в любые почтовые ящики yandex.ru или на любые Email адреса mail.ru(***@mail.ru ***@list.ru, ***@inbox.ru, ***@bk.ru, ***@vk.ru).
В таком случае можно воспользоваться отправкой Email через SMTP с реального почтового ящика, добавленного на Вашем домене.
Для начала, скачайте архив PHPMailer.zip и выложите его в КОРЕНЬ сайта.
Для отправки писем через SMTP на PHP используйте следующий код:
<?php
/* В самом начале страницы, до любого выполняемого HTML кода!!! */
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
?>
<!--
HTML код страницы...
-->
<?php
/* Подключение PHPMailer и SMTP */
require_once($_SERVER['DOCUMENT_ROOT'].'/PHPMailer/src/Exception.php');
require_once($_SERVER['DOCUMENT_ROOT'].'/PHPMailer/src/PHPMailer.php');
require_once($_SERVER['DOCUMENT_ROOT'].'/PHPMailer/src/SMTP.php');
/* Создание массива характеристик письма */
$mail = new PHPMailer\PHPMailer\PHPMailer();
/* Настройки SMTP - в Массив */
$mail->IsSMTP();
$mail->CharSet='UTF-8';
$mail->SMTPAuth=true;
$mail->SMTPDebug=0;
/* Подключение профильного адреса для отправления письма - в Массив */
$mail->Host='mail.nic.ru'; /* Пример для NIC.ru */
$mail->Port=25; /* SMTP порт NIC.ru */
$mail->Username='User@sitename.ru'; /* Адрес почты на Вашем сайте! */
$mail->Password='EmailPassword'; /* Пароль Вашей почты */
/* От кого - в Массив */
$mail->setFrom('User@sitename.ru', 'UserName');
/* Тема письма - в Массив*/
$mail->Subject="Тема отправляемого сообщения...";
/* Тело письма - в Массив*/
$mail->msgHTML($mess_s_id);
$mess='Текст отправляемого письма';
/* Кому - в Массив */
$addr='Email@Poluchatelya.ru';
/* Отправка */
if($mail->send()){
$messagemails="Письмо отправлено на: '".$addr."' ; ".date("d M Y - H:i:m:s");
}else{
$messagemails="ОШИБКА ОТПРАВКИ СООБЩЕНИЯ: ".$mail->ErrorInfo;
}
/* Устанавливаем 5 секундную паузу между отправками писем, чтобы SMTP сервер точно выдержал нагрузку. */
sleep(5);
/* Убираем ранее добавленного получателя(адресата) письма */
$mail->ClearAddresses();
/* Добавляем нового получателя(адресата) письма для очередной отправки...*/
$mail->addAddress($NEWaddr);
/* ... и при необходимости повторяем отправку письма на новый Email адрес...*/
?>