codeigniter忘记密码邮件未送达

时间:2016-01-20 09:02:38

标签: php forms codeigniter email

所以我对这个功能有一个小问题。

public function forgot()
    {

        $this->form_validation->set_rules('email', 'Email', 'required|valid_email'); 

        if($this->form_validation->run() == FALSE) {
            $this->load->view('header');
            $this->load->view('forgot');
            $this->load->view('footer');
        }
        else{
            $email = $this->input->post('email');  
            $clean = $this->security->xss_clean($email);
            $userInfo = $this->user_model->getUserInfoByEmail($clean);

            if(!$userInfo){
                $this->session->set_flashdata('flash_message', 'Adres email nie istnieje');
                redirect(site_url().'/main/login');
            }   

            if($userInfo->status != $this->status[1]){ //if status is not approved
                $this->session->set_flashdata('flash_message', 'Twoje konto nie zostało aktywowane');
                redirect(site_url().'/main/login');
            }

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

                $config = Array(
                    'protocol' => 'smtp',
                    'smtp_host' => 'ssl://smtp.gmail.com',
                    'smtp_port' => 465,
                    'smtp_user' => 'email',
                    'smtp_pass' => 'haslo',
                    'mailtype'  => 'html', 
                    'charset'   => 'utf-8'
                );

            $this->email->initialize($config);
            $this->email->set_newline("\r\n");

            $token = $this->user_model->insertToken($userInfo->id);                    
            $qstring = base64_encode($token);                    
            $url = site_url() . '/main/reset_password/token/' . $qstring;
            $link = '<a href="' . $url . '">' . $url . '</a>'; 

            $message = '';                     
            $message .= '<strong>Zmiana hasła</strong><br>';
            $message .= '<strong>Aby dokonać zmiany hasła przejdź na podany adres:</strong> ' . $link;             

            $toEmail = $this->input->post('email');
            $to = $toEmail;
            $this->email->clear();
            $this->email->from('whatever@c.com');
            $this->email->to($to);
            $this->email->subject('Thanks for registering');
            $this->email->message($message);

            if(!$this->email->send())
            { 
                echo $this->email->print_debugger();
                $this->session->set_flashdata('flash_message', 'Password reset fail.');
                redirect(site_url().'/main/forgot');
            }
            else
            {           
                $this->session->set_flashdata('flash_message', 'Password reset done.');
                redirect(site_url().'/main/login');
            }



        }

    }

这是我在模型中的函数,假设收到电子邮件:

public function getUserInfoByEmail($email) 
{ 
$q = $this->db->get_where('users', array('email' => $email), 1); 
if($this->db->affected_rows() > 0){ 
$row = $q->row(); 
return $row; 
}else{ 
error_log('no user found getUserInfo('.$email.')'); 
return false; 
} 
}

我在重置密码时没有错误,我收到了令牌被发送到邮件但我没有收到收件箱中任何邮件的积极信息。

1 个答案:

答案 0 :(得分:1)

在控制器中

public function forgot()
{
    $this->form_validation->set_rules('email', 'Email', 'required|valid_email'); 

    if($this->form_validation->run() == FALSE) {
        $this->load->view('header');
        $this->load->view('forgot');
        $this->load->view('footer');
    }
    else{
        $email = $this->input->post('email');  
        $clean = $this->security->xss_clean($email);
        $userInfo = $this->user_model->getUserInfoByEmail($clean);

        if($userInfo == false)
        {
            $this->session->set_flashdata('flash_message', 'Adres email nie istnieje');
            redirect(site_url().'/main/login');
        }
        elseif ($userInfo[0]['status'] != $this->status[1]) 
        {
            $this->session->set_flashdata('flash_message', 'Twoje konto nie zostało aktywowane');
            redirect(site_url().'/main/login');.
        }  
        else
        {
            $this->load->library('email');

            $config = Array(
                'protocol' => 'smtp',
                'smtp_host' => 'ssl://smtp.gmail.com',
                'smtp_port' => 465,
                'smtp_user' => 'mymail@gmail.com', # Change this
                'smtp_pass' => 'pass', # Change this too
                'mailtype'  => 'html', 
                'charset'   => 'utf-8'
            );

            $this->email->initialize($config);
            $this->email->set_newline("\r\n");

            $token = $this->user_model->insertToken($userInfo[0]['id']);                    
            $qstring = base64_encode($token);                    
            $url = site_url() . '/main/reset_password/token/' . $qstring;
            $link = '<a href="' . $url . '">Activation Link</a>';

            $message = '';                     
            $message .= '<strong>Zmiana hasła</strong><br>';
            $message .= '<strong>Aby dokonać zmiany hasła przejdź na podany adres:</strong> ' . $link;             

            $toEmail = $this->input->post('email');

            $this->email->clear();
            $this->email->from('whatever@c.com');
            $this->email->to($toEmail);
            $this->email->subject('Thanks for registering');
            $this->email->message($message);

            if(!$this->email->send())
            { 
                //echo $this->email->print_debugger();
                $this->session->set_flashdata('flash_message', 'Password reset fail.');
                redirect(site_url().'/main/forgot');
            }
            else
            {           
                $this->session->set_flashdata('flash_message', 'Password reset done.');
                redirect(site_url().'/main/login');
            }
        }
    }
}

在模型中

public function getUserInfoByEmail($email) 
{ 
    $query = $this->db->query("SELECT * FROM users WHERE email = '$email' ");
    $result = $query->result_array();

    $count = count($result);

    if(empty($count)){ 
        return false;
    }
    else{ 
        return $result;
    }        
}