Не приходит письмо на почту после регистрации [дубликат]

123
05 сентября 2019, 13:20

Данный вопрос является точным дубликатом:

  • Проблемы с формой регистрации

Написал регистрацию на сайте, запись в БД добавляется, но на почту письмо не приходит, в чем может быть проблема? Файл index.php:

<form style="padding-top:200px">
<input type="text" class="login__input" name="login" id="login" placeholder="Username" required pattern="^[a-zA-Z0-9-_\.]{5,20}$" title="LOGIN can consist of 5 (five) to 20 (twenty) characters from: English characters (lower case), numbers and signs - (dot), (dash), (bottom_incident)" autocomplete="off">
<input type="email" class="login__input" name="email" id="email" placeholder="Email" required>
<input type="button" name="reg" id="registration"  value="Register" onclick="CheckForm();">
<input type="password" class="login__input" name="password" id="password" placeholder="Password" required pattern="(?=(.*[0-9]))(?=.*[a-zа-я])(?=(.*[A-ZА-Я]))(?=(.*)).{6,20}" title="The password can consist of 6 (six) to 20 (twenty) characters, you must have at least one digit, one capital letter, one small letter">
<input type="password" class="login__input" name="password2" id="password2" placeholder="Repeat Password" required pattern="(?=(.*[0-9]))(?=.*[a-zа-я])(?=(.*[A-ZА-Я]))(?=(.*)).{6,20}" title="The password can consist of 6 (six) to 20 (twenty) characters, you must have at least one digit, one capital letter, one small letter">
</form>             
</div>

<script>
        function CheckForm(){
            var pass1 = document.forms[0].password.value;
            var pass2 = document.forms[0].password2.value;
            var login = document.forms[0].login.value;
            var email = document.forms[0].email.value;
            if (!(document.getElementById('login').checkValidity())){
                $('.alert').css('background','red');
                Alert_Opoveshenie('Login is incorrect!');
                return false    
            }
            if (!(document.getElementById('email').checkValidity())){
                $('.alert').css('background','red');
                Alert_Opoveshenie('E-mail is incorrect!');
                return false    
            }
            if (!(document.getElementById('password').checkValidity())){
                $('.alert').css('background','red');
                Alert_Opoveshenie('Password №1 is incorrect!');
                return false    
            }
            if (!(document.getElementById('password2').checkValidity())){
                $('.alert').css('background','red');
                Alert_Opoveshenie('Password №2 is incorrect!');
                return false    
            }
            if (pass1 != pass2) {
                $('.alert').css('background','red');
                Alert_Opoveshenie('Password mismatch!');
                return false
            }

            $.ajax({
                url: 'Registration.php',
                type: 'POST',
                data: {login:login, password:pass1, email:email},
                success: function(res){
                    if (res.color=='green'){
                        document.location.href = "http://www.effmining.com/";
                        return true
                    }
                    else{
                        $('.alert').css('background',res.color);
                        Alert_Opoveshenie(res.message);
                        return false
                    }
                },
                error: function(){
                    $('.alert').css('background','red');
                    Alert_Opoveshenie('Error!');
                    return false
                }
            });
        }

function Alert_Opoveshenie(Text){
  document.getElementById("alert").innerHTML = Text;
  $('.alert').animate({
    bottom: '10px',
    opacity: '1'
  },1000,function(){
// После показа убираем его
    var alertHide = setInterval(function(){
      $('.alert').animate({
        bottom: '-100%',
        opacity: '0'
      },1000);
      clearInterval(alertHide);
    },2000); // Время "жизни" алерта 2 секунды.
  });
}
</script>
<div class="alert" id="alert">Оповещение</div>

Файл registration.php:

<?php
    ini_set('display_errors',1);
    error_reporting('E_ALL');

            //SETTINGS//
            $server_bot = 'smtp.gmail.com';
            $password_bot = 'xxxxxxxx';
            $mail_bot = 'xxxx';
            $name_bot = 'xxxxxx';
            $title = 'Confirmation of registration on xxxxxxx';
            $mess = 'In order to continue registration, click on the link:';
            $mess1 = 'If you did not register on this site, then just ignore this email.';
            //SETTINGS//
            include_once('db.php');
            include_once('inc.class.php');//Различные классы и функции для упрощения работы
            $SETTINGS = new SETTINGS();//////////////////////////////START_SETTINGS_CLASS////////////////////
            $FORM = new FORM();//////////////////////////////////////START_FORM_CLASS////////////////////////
            $AUTH = new AUTH();//////////////////////////////////////START_AUTH_CLASS////////////////////////
            // Присваивание переменных из предыдущей формы
            $login = htmlspecialchars($_POST['login']);
            $password = htmlspecialchars($_POST['password']);
            $mail = htmlspecialchars($_POST['email']);
            $tm = time();
            $password = password_hash($password, PASSWORD_DEFAULT);
            //Закончил присваивать 
            //Вычисление количества записей  в БД с принятыми Логином и Емэйлом 
            $querylogin=$mysqli->query("SELECT * FROM `users` WHERE login='".$login."'");
            $numrowlogin = $querylogin->num_rows;

            $queryemail=$mysqli->query("SELECT * FROM `users` WHERE mail='".$mail."'");
            $numrowemail = $queryemail->num_rows;
            //Закончил вычислять    
            //Всё для бота отправки сообщ
            $mail_class = new EMAIL($email_bot); //Создаём экземпляр класса
            $mail_class->setFromName($name_bot); //Устанавливаем имя в обратном адресеc
            $mailSMTP = new SMTP_EMAIL($server_bot, $mail_bot, $password_bot, $name_bot, 465); // создаем экземпляр класса
            $headers = "MIME-Version: 1.0\r\n";
            $headers .= "Content-type: text/html; charset=utf-8\r\n"; // кодировка письма
            $headers .= "From: ".$name_bot." <".$mail_bot." >\r\n"; // от кого письмо
            //Проверки на уникальность и добавление в БД
            if ($numrowlogin==0){
                if ($numrowemail==0){
                    if($mysqli->query("INSERT INTO `users` (`login`, `password`, `mail`, `status`) VALUES ('$login', '$password', '$mail', 'false')")){

                        $valid_sql = $mysqli->query("SELECT `id` FROM `user` WHERE login='".$login."'");    
                        $valid_row = $valid_sql->fetch_assoc();
                        $id_act = $valid_row["id"];
                        $messageEmail = $mess." <a href=http://effmining.com/activate.php?login=".$login."&id_act=".$id_act.">link</a> ".$mess1;
                        if ($resultEmail = mail($mail, $title, $messageEmail, $headers)){
                            $message = 'You win!';
                            $color = 'green';
                            $out = array(
                                'message' => $message,
                                'color' => $color
                            );
                            header('Content-Type: text/json; charset=utf-8');
                            echo json_encode($out);
                            die;
                        }
                    }
                    else {
                        $message = "Failed to insert data information!";
                        $color = 'red';
                        $out = array(
                            'message' => $message,
                            'color' => $color
                        );
                        header('Content-Type: text/json; charset=utf-8');
                        echo json_encode($out);
                        die;
                    }
                }   
                else {
                    $message = "That Email already exists! Please try another one!";
                    $color = 'red';
                    $out = array(
                        'message' => $message,
                        'color' => $color
                    );
                    header('Content-Type: text/json; charset=utf-8');
                    echo json_encode($out);
                    die;
                }
            }
            else {
                $message = "That Login already exists! Please try another one!";
                $color = 'red';
                $out = array(
                    'message' => $message,
                    'color' => $color
                );
                header('Content-Type: text/json; charset=utf-8');
                echo json_encode($out);
                die;
            }
?>

Класс SMTP_EMAIL:

class SMTP_EMAIL {
    /**
    *
    * @var string $smtp_username - логин
    * @var string $smtp_password - пароль
    * @var string $smtp_host - хост
    * @var string $smtp_from - от кого
    * @var integer $smtp_port - порт
    * @var string $smtp_charset - кодировка
    *
    */
    public $smtp_username;
    public $smtp_password;
    public $smtp_host;
    public $smtp_from;
    public $smtp_port;
    public $smtp_charset;
    public function __construct($smtp_host, $smtp_username, $smtp_password, $smtp_from, $smtp_port = 465, $smtp_charset = "utf-8") {
        $this->smtp_username = $smtp_username;
        $this->smtp_password = $smtp_password;
        $this->smtp_host = $smtp_host;
        $this->smtp_from = $smtp_from;
        $this->smtp_port = $smtp_port;
        $this->smtp_charset = $smtp_charset;
    }
    /**
    * Отправка письма
    *
    * @param string $mailTo - получатель письма
    * @param string $subject - тема письма
    * @param string $message - тело письма
    * @param string $headers - заголовки письма
    *
    * @return bool|string В случаи отправки вернет true, иначе текст ошибки *
    */
    function send($mailTo, $subject, $message, $headers) {
        $contentMail = "Date: " . date("D, d M Y H:i:s") . " UT\r\n";
        $contentMail .= 'Subject: =?' . $this->smtp_charset . '?B?' . base64_encode($subject) . "=?=\r\n";
        $contentMail .= $headers . "\r\n";
        $contentMail .= $message . "\r\n";
        try {
            if(!$socket = @fsockopen($this->smtp_host, $this->smtp_port, $errorNumber, $errorDescription, 30)){
                throw new Exception($errorNumber.".".$errorDescription);
            }
            if (!$this->_parseServer($socket, "220")){
                throw new Exception('Connection error');
                echo "123";
            }
            fputs($socket, "EHLO " . $this->smtp_host . "\r\n");
            if (!$this->_parseServer($socket, "250")) {
                fclose($socket);
                throw new Exception('Error of command sending: HELO');
                echo "123";
            }
            fputs($socket, "AUTH LOGIN\r\n");
            if (!$this->_parseServer($socket, "334")) {
                fclose($socket);
                throw new Exception('Autorization error1');
                    echo "123";
            }
            fputs($socket, base64_encode($this->smtp_username) . "\r\n");
            if (!$this->_parseServer($socket, "334")) {
                fclose($socket);
                throw new Exception('Autorization error2');
                    echo "123";
            }
            fputs($socket, base64_encode($this->smtp_password) . "\r\n");
            if (!$this->_parseServer($socket, "235")) {
                fclose($socket);
                throw new Exception('Autorization error3');
                    echo "123";
            }
            fputs($socket, "MAIL FROM: ".$this->smtp_username."\r\n");
            if (!$this->_parseServer($socket, "250")) {
                fclose($socket);
                throw new Exception('Error of command sending: MAIL FROM');
                    echo "123";
            }
            fputs($socket, "RCPT TO: " . $mailTo . "\r\n");
            if (!$this->_parseServer($socket, "250")) {
                fclose($socket);
                throw new Exception('Error of command sending: RCPT TO');
                    echo "123";
            }
            fputs($socket, "DATA\r\n");
            if (!$this->_parseServer($socket, "354")) {
                fclose($socket);
                throw new Exception('Error of command sending: DATA');
            }
            fputs($socket, $contentMail."\r\n.\r\n");
            if (!$this->_parseServer($socket, "250")) {
                fclose($socket);
                throw new Exception("E-mail didn't sent");
                    echo "123";
            }
            fputs($socket, "QUIT\r\n");
            fclose($socket);
        } catch (Exception $e) {
            return $e->getMessage();
        }
        return true;
    }
    private function _parseServer($socket, $response) {
        while (@substr($responseServer, 3, 1) != ' ') {
            if (!($responseServer = fgets($socket, 256))) {
                return false;
            }
        }
            if (!(substr($responseServer, 0, 3) == $response)) {
                return false;
            }
            return true;
    }
}
READ ALSO
Лишние символы в URL

Лишние символы в URL

Сорян за нубовские вопросы, но решения не нашелВникаю в разработку REST API, использую PHP STORM + MAMP Файл index

110
Как получить все ключи массива $request в Laravel?

Как получить все ключи массива $request в Laravel?

Как получить все ключи массива $request в Laravel? Подскажите способ без перебора этого массива, без всяких цикловДолжен же быть простой метод из коробки

115
Как изменить значение строки в таблице MySQL?

Как изменить значение строки в таблице MySQL?

Показал все содержимое таблицы:

139
Операторы из mysql в php

Операторы из mysql в php

Можно ли использовать оператор LIKE который в mysql запросах, для чего-то другого например для того что бы просто сравнить переменныеТипо:

96