Реализация забытого пароля в Codeigniter на localhost - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь внедрить функцию забытого пароля в codeigniter, но я столкнулся с такой проблемой, как этот, помогите мне решить эту проблему.Кроме того, когда я изменяю протокол на почту, он выдает мне еще одну ошибку:

Невозможно отправить письмо с помощью PHP mail ().Возможно, ваш сервер не настроен на отправку почты с использованием этого метода.

Полная ошибка описана ниже.

A PHP Error was encountered

    Severity: Warning

    Message: fsockopen(): unable to connect to ssl://smtp.gmail.com:25 (Connection timed out)

    Filename: libraries/Email.php

    Line Number: 2069

    The following SMTP error was encountered: 110 Connection timed out
    Unable to send email using PHP SMTP. Your server might not be configured to send mail using this method.

    Date: Thu, 14 Feb 2019 10:52:06 +0100
    From: "arazu" <arazugajera98@gmail.com>
    Return-Path: <arazugajera98@gmail.com>
    To: arazugajera98@gmail.com
    Subject: =?UTF-8?Q?Reset=20your=20passwrod?=
    Reply-To: <arazugajera98@gmail.com>
    User-Agent: CodeIgniter
    X-Sender: arazugajera98@gmail.com
    X-Mailer: CodeIgniter
    X-Priority: 3 (Normal)
    Message-ID: <5c653a46009bc@gmail.com>
    Mime-Version: 1.0


    Content-Type: multipart/alternative; boundary="B_ALT_5c653a46009c6"

    This is a multi-part message in MIME format.
    Your email application may not support this format.

    --B_ALT_5c653a46009c6
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit

    Click Here if you want to reset your password


    --B_ALT_5c653a46009c6
    Content-Type: text/html; charset=UTF-8
    Content-Transfer-Encoding: quoted-printable

    =3Ca href=3D'http://127.0.0.1/CodeIgniter/login/reset=5Fpassword/a5ea8860b0=
    5acc175d4c1847fab1f2ee'=3EClick Here=3C/a=3E if you want to reset your pass=
    word

    --B_ALT_5c653a46009c6--

Моя часть кода Forgot_password () выглядит следующим образом.

public function forgot_password(){
        $this->load->library('form_validation');
        $this->form_validation->set_rules('email','email','trim|required|valid_email');
        if($this->form_validation->run() == FALSE){
            echo "please enter email";
            $this->load->view('recover_password');
        }
        else{
            $email = $this->input->post('email');
            $result = $this->registration_model->email_exists($email);
            if($result == TRUE){
                $temp_pass=md5(uniqid());
                $email_config = array(
                    'smtp_host'=>'localhost',
                      'smtp_user'=>'arazugajera98@gmail.com',
                    'smtp_pass'=>'*******',
                    'smtp_port'=>25,
                    'charset'   => 'utf-8',
                    'protocol'=>'smtp',
                    'mailtype'=>'html'
                );
                $this->load->library('email');
                $this->email->initialize($email_config);

                $this->email->set_newline('\r\n');
                $this->email->from('arazugajera98@gmail.com','arazu');
                $this->email->to($this->input->post('email'));
                $this->email->subject('Reset your passwrod');

                $message = "this email is sent you to reset your password";
                $message = "<a href='".base_url()."login/reset_password/$temp_pass'>Click Here</a> if you want to reset your password";

                $this->email->message($message);
                $this->email->set_newline("\r\n");
                if($this->email->send()){
                    echo "hello"; exit();
                    if($this->registration_model->temp_reset_password($temp_pass)){
                        echo 'check your for instruction, thank you';
                    }
                }
                else{
                    //echo "email is not sent, please contact your administrator";
                     echo $this->email->print_debugger();
                }
            }else{
                echo "your email is not exists into database";
            }
        }

    }

Как отправить письмо в Codeigniter на localhost?

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Пожалуйста, загрузите библиотеку электронной почты до:

$ this-> load-> library ('email');

0 голосов
/ 14 февраля 2019

@ Arazu Gajera

Электронные письма можно отправлять, когда они находятся на действующем сервере.

НО, если вы хотите установить рабочую функцию электронной почты на локальном хосте, вам нужно установить конфигурацию SMTP как показано ниже.

ПРИМЕЧАНИЕ: - Это просто базовая настройка для конфигурации SMTP.Различные библиотеки электронной почты могут иметь разный синтаксис.

//Load email Library
$this->load->library('email');

$email_config ['charset']       = 'utf-8';
$email_config ['mailtype']      = 'html';
$email_config ['newline']       = "\r\n";

if($_SERVER['HTTP_HOST']=="localhost")
{
  //SMTP configuration
  $email_config = array(
                'smtp_host'=>'ssl://smtp.gmail.com';
                'smtp_user'=>'arazugajera98@gmail.com',
                'smtp_pass'=>'*******',
                'smtp_port'=>465;
                'protocol' =>'smtp',
            );
}

, поэтому $email_config ['charset'] = 'utf-8';, $email_config ['mailtype'] = 'html';, $email_config ['newline'] = "\r\n"; являются ОБЩИМИ переменными конфигурации электронной почты, используемыми как на локальном хосте, так и на Live-сервере.

И когда это localhost, функция электронной почты будет использовать // конфигурацию SMTP * массив 1021 *.

ПРИМЕЧАНИЕ: - Обратите внимание, что когда ваш сайт LIVE Server . Рекомендуется удалить это if($_SERVER['HTTP_HOST']=="localhost") условие электронной почты из всех файлов, где бы вы его не использовали.

РЕДАКТИРОВАТЬ: - (ВАЖНО) Пожалуйста, измените строку ниже

//$this->email->set_newline('\r\n');
$this->email->set_newline("\r\n");  //Use double quotes for \r\n

Потому что \ n означает новую строку только в двойных кавычках.В одинарных кавычках это означает буквальные символы \ n.

...