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