@alexiusgrey

Phpmailer — какой из способов правильный и где ошибаюсь?

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

Сайт без cms, простейший - кодом несколько страниц и должна быть одна форма, что отправляет имя и телефон на почту, должна быть не на ajax, а с редиректом на страницу "спасибо" - такое задание, прямое, не гибкое.
<form id="order_form" class="layout-form" method="POST" action="email.php" >
         <div class="form-group-container">
              <div class="form-group">
                    <label for="username"></label>
                     <input class="top-screen-input" id="username" name="username" type="text" placeholder="Ваше имя" required>
               </div>
                <div class="form-group">
                     <label for="userphone"></label>
                     <input class="top-screen-input" name="userphone" id="userphone" type="tel" placeholder="Ваш телефон" required>
                </div>
                 <button type="submit" class="top-screen-button">Забронировать</button>
     </div>
  </form>


Брал сначала сниппет из другого проекта с функцией mail(), которая там работала,но там было уже настроено смтп, а тут нет. Вот скачал phpmailer, сначала последнюю версию PHPMailer-master, и попробовал вот такой способ - это сам файл email.php
<?php
//Import PHPMailer classes into the global namespace
//These must be at the top of your script, not inside a function
require 'phpmailer/PHPMailer.php';
require 'phpmailer/SMTP.php';
require 'phpmailer/Exception.php';
//get data from form
$name = $_POST['username'];
$phone = $_POST['userphone'];
// preparing mail content
$messagecontent ="Name = ". $name . "<br>Phone = " . $phone . "<br>";
//Create an instance; passing `true` enables exceptions
$mail = new PHPMailer(true);
try {
    //Server settings
    //$mail->SMTPDebug = SMTP::DEBUG_SERVER;                      //Enable verbose debug output
    $mail->isSMTP();                                            //Send using SMTP
    $mail->Host       = 'smtp.yandex.ru';                     //Set the SMTP server to send through
    $mail->SMTPAuth   = true;                                   //Enable SMTP authentication
    $mail->Username   = 'shop.****@yandex.ru';                     //SMTP username
    $mail->Password   = 'пароль внешнего приложения';                               //SMTP password
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;            //Enable implicit TLS encryption
    $mail->Port       = 587;                                    //пробовал и 465, закомментировав предыдущую строку с тсл
    //Recipients
    $mail->setFrom('shop.****@yandex.ru', 'Mailer');
    $mail->addAddress('shop.****@yandex.ru', 'Joe User');     //Add a recipient
    $mail->addAddress('shop.****@yandex.ru');               //Name is optional
    $mail->addReplyTo('shop.****@yandex.ru', 'Information');
    $mail->addCC('shop.****@yandex.ru');
    $mail->addBCC('shop.****@yandex.ru');
    //Content
    $mail->isHTML(true);                                  //Set email format to HTML
    $mail->Subject = 'Here is the subject';
    $mail->Body    = $messagecontent;
    
    $mail->send();
    header('Location: https://example.com/thank-you.html');
} catch (Exception $e) {
    echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}


Просто ошибка, ни на почту не приходит,ни на странице обработчика ничего. И раскомментировал строку,чтоб в консоль показывало - ничего не показывало.
Нашел более старый способ, в котором требовался файл PHPMailerAutoload, в послденей версии из библиотеки его нету, скачал PHPMailer-5.2-stable, предпоследнюю, способ вот такой
require_once 'phpmailer/PHPMailerAutoload.php';

//get data from form
$name = $_POST['username'];
$phone = $_POST['userphone'];
// preparing mail content
$messagecontent ="Name = ". $name . "<br>Phone = " . $phone . "<br>";
//Create an instance; passing `true` enables exceptions
$mail = new PHPMailer(true);
try {
    //Server settings
    //$mail->SMTPDebug = SMTP::DEBUG_SERVER;                      //Enable verbose debug output
    $mail->isSMTP();                                            //Send using SMTP
    $mail->Host       = 'smtp.yandex.ru';                     //Set the SMTP server to send through
    $mail->SMTPAuth   = true;                                   //Enable SMTP authentication
    $mail->Username   = 'shop.***@yandex.ru';                     //SMTP username
    $mail->Password   = 'пароль внешнего приложения';                               //SMTP password
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;            //Enable implicit TLS encryption
    $mail->Port       = 587;                                    //TCP port to connect to; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS`
    //Recipients
    $mail->setFrom('shop.****@yandex.ru', 'Mailer');
    $mail->addAddress('shop.***@yandex.ru', 'Joe User');     //Add a recipient
    $mail->addAddress('shop.****@yandex.ru');               //Name is optional
    $mail->addReplyTo('shop.***@yandex.ru', 'Information');
    $mail->addCC('shop.*****@yandex.ru');
    $mail->addBCC('shop.****@yandex.ru');
    //Content
    $mail->isHTML(true);                                  //Set email format to HTML
    $mail->Subject = 'Here is the subject';
    $mail->Body    = $messagecontent;
    
    $mail->send();
    header('Location: https://example.com/thank-you.html');
} catch (Exception $e) {
    echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}

Пароль и юзернейм точно правильный, с портами тсл и ссл игрался, все равно ошибка, что через аутолоад,что через три отдельных файла. Мне надо без композера, думаю есть же рабочие способы с помощью архива.
Может я вообще ошибаюсь в очевидных вещах?
  • Вопрос задан
  • 418 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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