В последнее время письма отправляемые с хостингов через функции mail()
и mb_send_mail()
часто попадают в спам или совсем не доходят до адресатов. Альтернатива – это отправка e-mail через SMTP с реального почтового ящика.
Проект на GitHub.com.
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require_once '/PHPMailer/src/Exception.php';
require_once '/PHPMailer/src/PHPMailer.php';
require_once '/PHPMailer/src/SMTP.php';
// Для более ранних версий PHPMailer
//require_once '/PHPMailer/PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->CharSet = 'UTF-8';
// Настройки SMTP
$mail->isSMTP();
$mail->SMTPAuth = true;
$mail->SMTPDebug = 0;
$mail->Host = 'ssl://smtp.gmail.com';
$mail->Port = 465;
$mail->Username = 'Логин';
$mail->Password = 'Пароль';
// От кого
$mail->setFrom('mail@snipp.ru', 'Snipp.ru');
// Кому
$mail->addAddress('mail@site.com', 'Иван Петров');
// Тема письма
$mail->Subject = $subject;
// Тело письма
$body = '<p><strong>«Hello, world!» </strong></p>';
$mail->msgHTML($body);
// Приложение
$mail->addAttachment(__DIR__ . '/image.jpg');
$mail->send();
Если при отправки писем возникает ошибка «Could not connect to SMTP host
», то необходимо добавить следующие строки:
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
$mail->Host = 'ssl://smtp.yandex.ru';
$mail->Port = 465;
$mail->Username = 'Логин@yandex.ru';
$mail->Password = 'Пароль';
В настройках почты нужно разрешить доступ к почтовому ящику с помощью почтовых клиентов:
$mail->Host = 'ssl://smtp.gmail.com';
$mail->Port = 465;
$mail->Username = 'Логин@gmail.com';
$mail->Password = 'Пароль';
Если возникает ошибка при отправки почты, то нужно отключить двухфакторную авторизацию и разблокировать «ненадежные приложения» в настройках конфиденциальности аккаунта https://myaccount.google.com/security?pli=1
Лимит – 2000 писем в день, но не более 5 в секунду.
$mail->Host = 'ssl://smtp.timeweb.ru';
$mail->Port = 465;
$mail->Username = 'Логин@домен.ru';
$mail->Password = 'Пароль';
Доступ к сторонним почтовым серверам по SMTP-портам (25, 465, 587) ограничен, разрешена отправка не более 300 сообщений в сутки.
Лимит – 3000 писем в день.
$mail->Host = 'ssl://serverXXX.hosting.reg.ru';
$mail->Port = 465;
$mail->Username = 'Логин@домен.ru';
$mail->Password = 'Пароль';
Имя сервера можно узнать в разделе «Информация о включенных сервисах и паролях доступа»:
В разделе «Услуги» нужно включить опцию «SMTP-сервер»:
В настройках веб-сервера необходимо включить PHP расширение «openssl».
$mail = new PHPMailer\PHPMailer\PHPMailer();
и заработало.
У яндекса что-то поменялось, и не отправляются письма. SMTP ERROR: Password command failed: 535 5.7.8 Error: authentication failed: Invalid user or password!
Но вот сейчас отработало через reg.ru