PHPMailer не выдает ошибок, но и не отправляет письма
PHPMailer не выдает ошибок, но и не отправляет письма.
<?php
require_once('./phpmailer/PHPMailerAutoload.php');
$mail = new PHPMailer;
$mail->CharSet = 'utf-8';
$name = $_POST['name'];
$phone = $_POST['phone'];
$mail->isSMTP();
$mail->Host = 'smtp.yandex.ru';
$mail->SMTPAuth = true;
$mail->Username = '[email protected]';
$mail->Password = 'password';
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;
$mail->setFrom('[email protected]');
$mail->addAddress('[email protected]');
$mail->isHTML(true);
$title = "<h1>Новая заявка</h1>";
$date = date("d.m.y H:i");
$mail->Subject = 'Заявка от ' .$date;
$mail->Body = $title. '<p><strong>Имя:</strong> ' .$name. '</p><p><strong>Телефон:</strong> ' .$phone;
if(!$mail->send()) {
echo 'Ошибка';
} else {
header('Location: thx.html');
}
?>
Ответы (2 шт):
Короче говоря, ошибка была достаточно странной. Всё дело в smtp от Яндекса. Я пробовал разные порты и разные защитные протоколы (tls и ssl), но ничего не помогало.
РЕШЕНИЕ: Вам нужно использовать gmail почту для отправки сообщений. По крайнее мере, мне это помогло. Все правильные настройки ниже (лучше просто скопипастить код, исправить в нем только почты и пароли и наслаждаться жизнью)
Ссылка на скачивание той версии, что и у меня. Так как не факт, что более новые или более старые версии phpmailer будут работать с этим кодом: http://failzoma.ru/file/9f287a
Хорошо работает с гугловской почтой (gmail.com).
P.S.: этот код не работает (пока что, но я пытаюсь это исправить) на бесплатных хостингах (на платных не проверял, знатоки могут ответить). На опен сервере все работает идеально.
<?php
require_once('./phpmailer/PHPMailerAutoload.php'); //папка phpmailer должна лежать в одной директории с этим файлом (ссылка на скачивание выше)
$mail = new PHPMailer;
$mail->CharSet = 'utf-8';
$name = $_POST['name']; //добавляем все нужные переменные
$phone = $_POST['phone']; //добавляем все нужные переменные
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com'; //проще всего делать через gmail. В "Управление аккаунтом Google" выбираем "Безопасность". Почти в самом низу будет "Ненадежные приложения, у которых и т.д." - это мы должны включить!
$mail->SMTPAuth = true;
$mail->Username = '[email protected]'; //реальная gmail почта
$mail->Password = 'yourPass'; //реальный пароль от этой почты
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
$mail->setFrom('[email protected]'); //повторяем ту же gmail почту
$mail->addAddress('[email protected]'); //куда хотим получать письма (уже не обязательно от гугла)
$mail->isHTML(true); //включаем html разметку в письме
//это оптионально (необязательно)
$title = "<h1>Новая заявка</h1>"; //заголовок
$date = date("d.m.y H:i"); //дата
//это обязательно
$mail->Subject = 'Заявка от ' .$date; //заголовок письма
$mail->Body = $title. '<p><strong>Имя:</strong> ' .$name. '</p><p><strong>Телефон:</strong> ' .$phone; //"тело" письма, т.к. мы включили html, может теперь красиво оформить его
//проверка на отправку. Можно сделать вывод текста, можно отправить юзера на какую-то страницу
if(!$mail->send()) {
echo 'Ошибка';
} else {
header('Location: thx.html');
}
?>
P.P.S.: если нужна почта для отправки писем именно не от гугла, можете мой исходный код, который был в вопросе, исправить защиту и порт на
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
У меня не сработало, но может Вам поможет)
$mail = new PHPMailer(true);
$mail->CharSet = 'cp1251';
$mail->Mailer = 'smtp';
$mail->SMTPDebug = 3; //отладка
$mail->isSMTP();
$mail->Host = 'ssl://smtp.yandex.ru';
$mail->SMTPAuth = true;
$mail->Username = '[email protected]';
$mail->Password = 'PASSWORD';
$mail->Port = 465;