php で電子メール検証を実装する方法: まず phpMailer をダウンロードし、次にそれをプロジェクトのルート ディレクトリに解凍し、次にメール サーバーが必要になります。最後に「config.php」に電子メール関連の情報を設定してファイルを作成します。送信方法はメールのpublicメソッドで大丈夫です。
推奨: 「PHP ビデオ チュートリアル 」
1. はじめに
要件ユーザーは登録時に電子メールを入力します。登録後、ログインする前に電子メールを認証する必要があります。
2.
検証プロセスを実装します。登録が成功すると、ユーザーの検証コードが生成され、接続の形式でユーザーのメールボックスに送信されます。接続をクリックして確認コードを Web サイトに送り返します。Web サイトは確認コードがこのユーザー用に生成されたかどうかを確認します。アカウントは 24 時間以内に確認される必要があり、確認されない場合はアカウントが無効になります。
1. 準備
メールを送信するには、phpMailer クラスを追加する必要があります。 phpMailer をダウンロードし、プロジェクトのルート ディレクトリに解凍します。
smtp プロトコルを使用して電子メールを送信する場合、ポート番号は 25 です。電子メールを受信する場合は、pop3 プロトコルを使用し、ポート番号は 110 です。メールサーバーも必要です。自分で構築することも、サードパーティのものを使用することもできます。サードパーティのメールサーバーを使用するには、サードパーティにアカウントを登録する必要があります。ログインして、smtp プロトコルを有効にします。
config.php でメール関連の情報を設定します。
'EMAIL' => array( 'host' => 'smtp.163.com', 'user' => 'youxiangzhanghao', 'password' => 'password', //此处的密码为user邮箱在开启smtp时设置的授权密码。 ),
2. 電子メールを送信するためのパブリック メソッドを作成します
/** * 发送邮件的方法 */ functionsendMail($to, $title, $content) { require_once('./PHPMailer-5.2.14/class.smtp.php'); require_once('./PHPMailer-5.2.14/class.phpmailer.php'); $mail = new PHPMailer(); //设置为发送邮件 $mail->IsSMTP(); //是否允许发送html代码为邮件内容 $mail->IsHTML(true); $mail->CharSet = 'utf-8'; //是否需要身份验证 $mail->SMTPAuth = true; //邮件服务器的帐号信息 $mailConfig = C('EMAIL'); $mail->From =$mailConfig['user'].'@163.com'; $mail->FromName =$mailConfig['user']; $mail->Host = $mailConfig['host']; $mail->Username = $mailConfig['user']; $mail->Password =$mailConfig['password']; //发邮件的端口号 $mail->Port = 25; //收件人 $mail->AddAddress($to); //邮件标题 $mail->Subject = $title; //邮件内容 $mail->Body = $content; return($mail->send()); }
コントローラーのホームページ メソッドでテストします
//测试发送邮件 var_dump(sendMail('haha@163.com','phptestemail', '<a href="http://www.phptest.com">hahahah</a>'));
3. メンバー テーブルを変更し、電子メール フィールドと検証コード フィールドを追加します
email varchar(150) not null comment '邮箱', email_chkcode char(32) not null default '' comment '邮箱验证码', email_chkcode_time int unsigned not null comment '邮箱验证码生成时间', key email_chkcode(email_chkcode)
4. 登録を変更します。電子メールを入力する必要があります
登録フォームを変更し、電子メール フィールドを追加します。電子メール フィールドの挿入を許可するようにメンバー モデルを変更し、検証を追加します。電子メールフィールドのルールを電子メールとして指定します。
5. 登録前に電子メール検証コードを生成します
_before_insert() メソッド内で
//生成email验证码 $data['email_chkcode']= md5(uniqid()); $data['email_chkcode_time']= time();
6. 登録後、ユーザーの電子メール アドレスに検証コードを送信します
/** * 注册后的钩子函数 */ protected function _after_insert($data,$option) { $content = "欢迎注册,请点击以下完成验证:<p><a href='http://www.php2.com/eshop/index.php/Home/Member/email_chk/code/{$data['email_chkcode']}'>请点击</a></p>"; sendMail($data['email'],'php2网站邮箱验证', $content); }
7. MEMBER コントローラーの追加方法の確認完了
/** * 完成邮箱验证方法 */ public function email_chk() { //接收验证码 $code = I('get.code'); //查询这个验证码是否有效 $member = D('Admin/Member'); $info = $member->field('id,email_chkcode_time')->where(array( 'email_chkcode' => $code, ))->find(); if($info) { if((time() -$info['email_chkcode_time']) > 86400) { //帐号过期,删除这个帐号 $member->delete($info['id']); $this->error('验证码已过期,帐号已经删除,请重新注册', U('regist')); exit; } else { //验证通过,将验证码清空 $member->where(array( 'id' => $info['id'], ))->setFielf('email_chkcode', ''); $this->success('验证通过,请登陆', U('login')); exit; } } else { $this->error('参数错误', U('/')); exit; } }
8. メンバーシップモデルでのログイン方法の変更
//判断这个帐号是否通过验证码验证 if(!empty($user['email_chkcode'])) { $this->error= '必须验证后才可以登陆'; returnfalse; }
9. 登録コードの変更
アカウントがすでに存在する場合 アカウントは存在しますが、有効期限が切れており、認証されていません。このアカウントは削除できます。
登録時にフォーム検証を追加し、ユーザー名と電子メールの一意性と登録検証コードの検証を追加します。
array('email','chk_un_email', 'email はすでに存在します!', 1,'callback', 3),
名前はすでに存在します!', 1,'callback' , 3),
//验证已经存在的邮箱是否通过验证 public function chk_un_email() { $email = I('post.email'); $username =I('post.username'); $hasEmail =$this->field('id,email_chkcode,email_chkcode_time')->where(array( 'email' =>$email, ))->find(); if($hasEmail) { if(empty($hasEmail['email_chkcode'])) { returnfalse; } else { if(time() -$hasEmail['email_chkcode_time'] > 86400) { $this->delete($hasEmail['id']); returntrue; } else { returnfalse; } } } else { return true; } } //验证已经存在的用户名是否通过验证 public function chk_un_user() { $username =I('post.username'); $hasUsername =$this->field('id,email_chkcode,email_chkcode_time')->where(array( 'username' =>$username, ))->find(); if($hasUsername) { if(empty($hasUsername['email_chkcode'])) { returnfalse; } else { if(time() -$hasUsername['email_chkcode_time'] > 86400) { $this->delete($hasUsername['id']); returntrue; } else { returnfalse; } } } else { return true; } }
10.テスト
以上がPHP は電子メール検証を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。