Php 将令牌发送到codeigniter中的电子邮件

Php 将令牌发送到codeigniter中的电子邮件,php,codeigniter,email,Php,Codeigniter,Email,我正在开发一个小应用程序,可以提供注册帐户和发送令牌以完成注册到电子邮件 除了发送我无法处理的电子邮件,我什么都能用,我不知道该怎么做。我真的很感激任何帮助和解释,我如何才能真正发送电子邮件,而不仅仅是在视图中显示令牌 我想通过邮件发送令牌的功能有两个:注册和忘记 这是我的控制器: <?php defined('BASEPATH') OR exit('No direct script access allowed'); class Main extends CI_Controller {

我正在开发一个小应用程序,可以提供注册帐户和发送令牌以完成注册到电子邮件

除了发送我无法处理的电子邮件,我什么都能用,我不知道该怎么做。我真的很感激任何帮助和解释,我如何才能真正发送电子邮件,而不仅仅是在视图中显示令牌

我想通过邮件发送令牌的功能有两个:注册和忘记

这是我的控制器:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Main extends CI_Controller {

        public $status; 
        public $roles;

        function __construct(){
            parent::__construct();
            $this->load->model('User_model', 'user_model', TRUE);
            $this->load->library('form_validation');    
            $this->form_validation->set_error_delimiters('<div class="error">', '</div>');
            $this->status = $this->config->item('status'); 
            $this->roles = $this->config->item('roles');
        }      

    public function index()
    {   
            if(empty($this->session->userdata['email'])){
                redirect(site_url().'/main/login/');
            }            
            /*front page*/
            $data = $this->session->userdata(); 
            $this->load->view('header');            
            $this->load->view('index', $data);
            $this->load->view('footer');
    }

    public function ankieta()
    {
            $data = $this->session->userdata(); 
            $this->load->view('ankieta/header');            
            $this->load->view('ankieta/ankieta', $data);
            $this->load->view('ankieta/footer');
    }

        public function register()
        {

        $config = Array(
        'protocol' => 'smtp',
        'smtp_host' => 'ssl://smtp.gmail.com',
        'smtp_port' => 465,
        'smtp_user' => 'mymail@gmail.com',
        'smtp_pass' => 'pass',
        'mailtype'  => 'html', 
        'charset'   => 'utf-8'
        );
        $this->load->library('email', $config);
        $this->email->set_newline("\r\n");

            $this->form_validation->set_rules('firstname', 'Imię', 'required');
            $this->form_validation->set_rules('lastname', 'Nazwisko', 'required');    
            $this->form_validation->set_rules('email', 'Email', 'required|valid_email');    

            if ($this->form_validation->run() == FALSE) {   
                $this->load->view('header');
                $this->load->view('register');
                $this->load->view('footer');
            }else{                
                if($this->user_model->isDuplicate($this->input->post('email'))){
                    $this->session->set_flashdata('flash_message', 'Podany adres email już istnieje');
                    redirect(site_url().'/main/login');
                }else{

                    $clean = $this->security->xss_clean($this->input->post(NULL, TRUE));
                    $id = $this->user_model->insertUser($clean); 
                    $token = $this->user_model->insertToken($id);                                        

                    $qstring = base64_encode($token);                    
                    $url = site_url() . '/main/complete/token/' . $qstring;
                    $link = '<a href="' . $url . '">' . $url . '</a>'; 

                    $message = '';                     
                    $message .= '<strong>Dziekujemy za dokonanie rejestracji.</strong><br>';
                    $message .= '<strong>Aby dokończyć rejestrację przejdź na podany adres:</strong> ' . $link;                          

                    $to = $email;
                    $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() === TRUE){ 
                 $this->session->set_flashdata('flash_message', 'Password reset done.');
                redirect(site_url().'/main/login');
             }else{
                 $this->session->set_flashdata('flash_message', 'Password reset fail.');
                redirect(site_url().'/main/forgot');
            }


                };              
            }
        }


        protected function _islocal(){
            return strpos($_SERVER['HTTP_HOST'], 'local');
        }

        public function complete()
        {                                   
            $token = base64_decode($this->uri->segment(4));       
            $cleanToken = $this->security->xss_clean($token);

            $user_info = $this->user_model->isTokenValid($cleanToken); //either false or array();           

            if(!$user_info){
                $this->session->set_flashdata('flash_message', 'Token jest nieprawidłowy lub wygasł');
                redirect(site_url().'/main/login');
            }            
            $data = array(
                'firstName'=> $user_info->first_name,
                'lastName'=> $user_info->last_name, 
                'email'=>$user_info->email, 
                'user_id'=>$user_info->id, 
                'token'=>base64_encode($token)
            );

            $this->form_validation->set_rules('password', 'Hasło', 'required|min_length[5]');
            $this->form_validation->set_rules('passconf', 'Potwierdź hasło', 'required|matches[password]');              

            if ($this->form_validation->run() == FALSE) {   
                $this->load->view('header');
                $this->load->view('complete', $data);
                $this->load->view('footer');
            }else{

                $this->load->library('password');                 
                $post = $this->input->post(NULL, TRUE);

                $cleanPost = $this->security->xss_clean($post);

                $hashed = $this->password->create_hash($cleanPost['password']);                
                $cleanPost['password'] = $hashed;
                unset($cleanPost['passconf']);
                $userInfo = $this->user_model->updateUserInfo($cleanPost);

                if(!$userInfo){
                    $this->session->set_flashdata('flash_message', 'Wystąpił problem ze zmianąTwoich danych');
                    redirect(site_url().'/main/login');
                }

                unset($userInfo->password);

                foreach($userInfo as $key=>$val){
                    $this->session->set_userdata($key, $val);
                }
                redirect(site_url().'/main/index');

            }
        }

        public function login()
        {
            $this->form_validation->set_rules('email', 'Email', 'required|valid_email');    
            $this->form_validation->set_rules('password', 'Hasło', 'required'); 

            if($this->form_validation->run() == FALSE) {
                $this->load->view('header');
                $this->load->view('login');
                $this->load->view('footer');
            }else{

                $post = $this->input->post();  
                $clean = $this->security->xss_clean($post);

                $userInfo = $this->user_model->checkLogin($clean);

                if(!$userInfo){
                    $this->session->set_flashdata('flash_message', 'Logowanie nie powiodło się');
                    redirect(site_url().'/main/login');
                }                
                foreach($userInfo as $key=>$val){
                    $this->session->set_userdata($key, $val);
                }
                redirect(site_url().'/main/index');
            }

        }

        public function logout()
        {
            $this->session->sess_destroy();
            redirect(site_url().'/main/login/');
        }

        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');
                }

                //build token 

                $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;             

                echo $message;
                exit;

            }

        }

        public function reset_password()
        {
            $token = base64_decode($this->uri->segment(4));       
            $cleanToken = $this->security->xss_clean($token);

            $user_info = $this->user_model->isTokenValid($cleanToken); //either false or array();               

            if(!$user_info){
                $this->session->set_flashdata('flash_message', 'Token jest nieprawidłowy lub wygasł');
                redirect(site_url().'/main/login');
            }            
            $data = array(
                'firstName'=> $user_info->first_name, 
                'lastName'=> $user_info->last_name,
                'email'=>$user_info->email, 
                'user_id'=>$user_info->id, 
                'token'=>base64_encode($token)
            );

            $this->form_validation->set_rules('password', 'Hasło', 'required|min_length[5]');
            $this->form_validation->set_rules('passconf', 'Potwierdź hasło', 'required|matches[password]');              

            if ($this->form_validation->run() == FALSE) {   
                $this->load->view('header');
                $this->load->view('reset_password', $data);
                $this->load->view('footer');
            }else{

                $this->load->library('password');                 
                $post = $this->input->post(NULL, TRUE);                
                $cleanPost = $this->security->xss_clean($post);                
                $hashed = $this->password->create_hash($cleanPost['password']);                
                $cleanPost['password'] = $hashed;
                unset($cleanPost['passconf']);                
                if(!$this->user_model->updatePassword($cleanPost)){
                    $this->session->set_flashdata('flash_message', 'Wystąpił błąd przy próbie zmiany hasła');
                }else{
                    $this->session->set_flashdata('flash_message', 'Twoje hasło zostało zmienione. Możesz się zalogować');
                }
                redirect(site_url().'/main/login');                
            }
        }       

}

因为我没有看到您尝试在任何地方发送电子邮件,所以您可以使用CI的内置库发送电子邮件

   //load ci email library 
public function send_registration_email()
{
    $this->load->library('email');
    $link = '<a href="' . $url . '">' . $url . '</a>'; 
    $message = $link;

    $to = 'some@email.com';
    $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() === TRUE){ //Sends a plain text email containing the link
         //something
     }else{
         //something else
    }
 }
//加载ci电子邮件库
公共功能发送\注册\电子邮件()
{
$this->load->library('email');
$link='';
$message=$link;
$to$some@email.com';
$this->email->clear();
$this->email->from($this)whatever@c.com');
$this->email->to$to;
$this->email->subject('谢谢注册');
$this->email->message($message);
如果($this->email->send()==TRUE){//发送包含链接的纯文本电子邮件
//某物
}否则{
//别的
}
}
同时配置本地主机邮件设置

  • 试试这个

    $this->load->library('email');
    
        $config = Array(
            'protocol' => 'smtp',
            'smtp_host' => 'ssl://smtp.gmail.com',
            'smtp_port' => 465,
            'smtp_user' => 'mymail@gmail.com',
            'smtp_pass' => 'pass',
            'mailtype'  => 'html', 
            'charset'   => 'utf-8'
        );
    
    $this->email->initialize($config);
    $this->email->set_newline("\r\n");
    
    $clean = $this->security->xss_clean($this->input->post(NULL, TRUE));
    $id = $this->user_model->insertUser($clean); 
    $token = $this->user_model->insertToken($id);                                        
    
    $qstring = base64_encode($token);                    
    $url = site_url() . '/main/complete/token/' . $qstring;
    $link = '<a href="' . $url . '">Activation Link</a>'; 
    
    $message = '';                     
    $message .= '<strong>Dziekujemy za dokonanie rejestracji.</strong><br>';
    $message .= '<strong>Aby dokończyć rejestrację przejdź na podany adres:</strong> '. $link;                        
    
    $toEmail = $this->input->post('email');
    $to = $toEmail; # undefine 
    $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 "fail <br>";
        echo $this->email->print_debugger();
        /*$this->session->set_flashdata('flash_message', 'Password reset fail.');
        redirect(site_url().'/main/register');*/
    }
    else
    {       
         echo "Pass <br>";        
       /* $this->session->set_flashdata('flash_message', 'Password reset done.');
        redirect(site_url().'/main/login');*/
    }
    
    $this->load->library('email');
    $config=Array(
    '协议'=>'smtp',
    'smtp_主机'=>'ssl://smtp.gmail.com',
    “smtp_端口”=>465,
    'smtp_用户'=>'mymail@gmail.com',
    “smtp_pass”=>“pass”,
    “邮件类型”=>“html”,
    “字符集”=>“utf-8”
    );
    $this->email->initialize($config);
    $this->email->set_newline(“\r\n”);
    $clean=$this->security->xss_clean($this->input->post(NULL,TRUE));
    $id=$this->user\u model->insertUser($clean);
    $token=$this->user\u model->insertToken($id);
    $qstring=base64_编码($token);
    $url=site\u url()/main/complete/token/”$qstring;
    $link='';
    $message='';
    $message.='Dziekujemy za dokonanie rejestracji.
    '; $message.='阿比·多科钦奇·雷杰斯特拉奇·普泽吉德·纳波达尼地址:'$链接 $toEmail=$this->input->post('email'); $to=$toEmail;#未定义 $this->email->clear(); $this->email->from($this)whatever@c.com'); $this->email->to$to; $this->email->subject('谢谢注册'); $this->email->message($message); 如果(!$this->email->send()) { 回显“失败
    ”; echo$this->email->print_debugger(); /*$this->session->set_flashdata('flash_message','Password reset fail'); 重定向(site_url()。/main/register')*/ } 其他的 { 回声“通过
    ”; /*$this->session->set_flashdata('flash_message','Password reset done'); 重定向(site_url()。/main/login')*/ }
    我添加了部分代码,但之后出现错误:严重性:警告消息:mail():无法在“localhost”端口25连接到mailserver,请验证php.ini中的“SMTP”和“SMTP\u port”设置或使用ini\u set()文件名:libraries/Email.phpy您的问题需要编辑以包含更新。您确实需要设置一些发送电子邮件的配置。对不起,我赶时间。我在注册函数中添加了更新,在收到这个SMTP错误后,我又稍微修改了我的代码。我添加了SMTP我的gmail acc信息(这里的这一个是假的),我一直收到邮件未发送的错误。@ChrisKucharzyk回复上添加的所有详细信息一切正常,除了忘记功能。我的意思是没有错误,但即使发送了令牌消息,也不会将带有令牌重置密码的电子邮件发送到电子邮件中。@ChrisKucharzyk最好的选择是将项目托管到live server并重试。因此,您可以轻松检查邮件发送功能。
    $this->load->library('email');
    
        $config = Array(
            'protocol' => 'smtp',
            'smtp_host' => 'ssl://smtp.gmail.com',
            'smtp_port' => 465,
            'smtp_user' => 'mymail@gmail.com',
            'smtp_pass' => 'pass',
            'mailtype'  => 'html', 
            'charset'   => 'utf-8'
        );
    
    $this->email->initialize($config);
    $this->email->set_newline("\r\n");
    
    $clean = $this->security->xss_clean($this->input->post(NULL, TRUE));
    $id = $this->user_model->insertUser($clean); 
    $token = $this->user_model->insertToken($id);                                        
    
    $qstring = base64_encode($token);                    
    $url = site_url() . '/main/complete/token/' . $qstring;
    $link = '<a href="' . $url . '">Activation Link</a>'; 
    
    $message = '';                     
    $message .= '<strong>Dziekujemy za dokonanie rejestracji.</strong><br>';
    $message .= '<strong>Aby dokończyć rejestrację przejdź na podany adres:</strong> '. $link;                        
    
    $toEmail = $this->input->post('email');
    $to = $toEmail; # undefine 
    $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 "fail <br>";
        echo $this->email->print_debugger();
        /*$this->session->set_flashdata('flash_message', 'Password reset fail.');
        redirect(site_url().'/main/register');*/
    }
    else
    {       
         echo "Pass <br>";        
       /* $this->session->set_flashdata('flash_message', 'Password reset done.');
        redirect(site_url().'/main/login');*/
    }