Задать вопрос
@RS-qrsk

PHPMailer не отправляет почту на yandex, что не так?

PHPMailer не отправляет почту по SMTP yandex, дебагер выдает следующее:

Could not authenticate.


Итак, по почте:
Все данные введены правильно, пароль приложений создан, все почтовые программы включены, почта активна
Сервер:
openssl - включено, сертификат висит

Процесс отправки
$username = '***********@yandex.ru';
$password = '******';

$host = 'smtp.yandex.ru';  // Пробовал 'ssl://smtp.yandex.ru'
$mail->SMTPDebug = SMTP::DEBUG_SERVER;
$mail->isSMTP();
$mail->Host = $host;
$mail->SMTPAuth = true;
$mail->Username = $username;
$mail->Password = $password;
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; 
$mail->Port = 465;

$mail->CharSet = 'UTF-8';
$mail->setFrom($username, '*****');
$mail->addAddress($user_email);  // $user_email = '******@yandex.ru'

$mail->isHTML(true); 
$mail->Subject = 'Тест';
$mail->Body = '<b>123</b>';
$mail->AltBody = 'Тестовое сообщение.';
$mail->send();


Что может быть не так?
  • Вопрос задан
  • 2829 просмотров
Подписаться 2 Средний 8 комментариев
Решения вопроса 2
@RS-qrsk Автор вопроса
В общем, кому интересно, проблема в итоге оказалась в хостинге, протестировали на другом и все заработало. К сожалению, владелец старого хостинга не захотел вносить изменения.
Если вы столкнетесь с аналогичной проблемой и вы уверены, что ваш код правильный, проверяйте с помощью OpenSSL, он вам точно покажет в чем проблема. В моем случае, проблема с сертификатами.
Ответ написан
Комментировать
kotomyava
@kotomyava
Системный администратор
Чтобы ящик заработал надо хотя бы один раз зайти в него через веб интерфейс яндекса.

SMTPSecure = 'TLS';
Port = 587;
В заголовке from должен быть тот же ящик, что и при авторизации.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@sokol_kb
8 часов убил на выяснение. почему мой скрипт отправляет письмо, а не один из плагинов не хочет.
Решение нашёл следующее

скачал библиотеку PHPMailer-6.6.3
переподключил

require_once __DIR__ . '/PHPMailer/Exception.php';
require_once __DIR__ . '/PHPMailer/PHPMailer.php';
require_once __DIR__ . '/PHPMailer/SMTP.php';

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

//и главная строчка: 
$phpmailer->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;  //Без которой письмо на 587й порт по tls не уходит.

//другие параметры:
$mail->SMTPDebug = SMTP::DEBUG_SERVER;
$mail->isSMTP();    
$mail->Mailer = 'tls';  
$mail->Host       = 'smtp.yandex.ru';
$mail->SMTPAuth   = true;
$mail->Username   = 'noreply@mydomain.ru';	
$mail->Password   = 'пароль от ящика noreply@mydomain.ru';
    
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
$mail->Port       = 587;


В итоге зашёл в один из плагинов вордпресс, переопределил библиотеку PHPMailer и всё заработало.

Всё дело в том, что мой хостер блочит порты и не разрешает соединяться напрямую с smtp, а для разблокировки портов, просит чуть-ли не наторильную доверенность, сканы 10 документов и т.д.
Ответ написан
Комментировать
alexeyshi
@alexeyshi
Попробуйте включить imap в настройках почты (для пущей уверености можете установить галочку и на POP3)

60e614fdab74e563987077.jpeg

Так же у яши есть пароли для приложений, можете попробовать авторизовываться через сгенерированный пароль приложений.

60e61748b8d0e339577726.jpeg

А так же можно попробовать заменить ENCRYPTION_SMTPS на ENCRYPTION_STARTTLS и порт с 465 на 587
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы