Maison > développement back-end > Problème PHP > PHP implémente la vérification des e-mails

PHP implémente la vérification des e-mails

藏色散人
Libérer: 2023-03-06 10:58:01
original
6520 Les gens l'ont consulté

Comment implémenter la vérification des e-mails en PHP : téléchargez d'abord phpMailer ; puis décompressez-le dans le répertoire racine du projet ; puis vous avez besoin d'un serveur de messagerie, enfin, configurez les informations relatives aux e-mails dans "config.php" et créez un fichier ; pour l'envoi La méthode publique de courrier fera l'affaire.

PHP implémente la vérification des e-mails

Recommandé : "Tutoriel vidéo PHP"

1 Introduction

Exigences. Les utilisateurs remplissent leur e-mail lors de leur inscription. Après l'inscription, ils doivent vérifier leur e-mail avant de se connecter.

2. Mettre en œuvre le processus de vérification

Après une inscription réussie, un code de vérification est généré pour l'utilisateur ; le code de vérification est envoyé à la boîte aux lettres de l'utilisateur via une connexion ; pour renvoyer le code de vérification au site Web ; Le site Web vérifie si le code de vérification est généré pour cet utilisateur ; le compte doit être vérifié dans les 24 heures, sinon le compte deviendra invalide.

1. Préparation

Vous devez ajouter la classe phpMailer pour envoyer des emails. Téléchargez phpMailer et extrayez-le dans le répertoire racine du projet.

Pour envoyer des emails, utilisez le protocole SMTP et le numéro de port est 25 ; pour recevoir des emails, utilisez le protocole POP3 et le numéro de port est 110. Un serveur de messagerie est également requis. Vous pouvez le créer vous-même ou en utiliser un tiers. L'utilisation d'un serveur de messagerie tiers nécessite l'enregistrement d'un compte auprès du tiers. Connectez-vous et activez le protocole SMTP.

Configurez les informations relatives au courrier électronique dans config.php.

   'EMAIL' => array(

       'host' => 'smtp.163.com',

       'user' => 'youxiangzhanghao',

       'password' => 'password', //此处的密码为user邮箱在开启smtp时设置的授权密码。     

),
Copier après la connexion

2. Créez une méthode publique pour l'envoi d'e-mails

/**

 * 发送邮件的方法

 */

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());

}
Copier après la connexion

Testez la méthode de la page d'accueil du contrôleur

//测试发送邮件

var_dump(sendMail(&#39;haha@163.com&#39;,&#39;phptestemail&#39;, &#39;<a href="http://www.phptest.com">hahahah</a>&#39;));
Copier après la connexion

3.

email  varchar(150)  not  null comment  &#39;邮箱&#39;,

email_chkcode  char(32)  not  null default  &#39;&#39;  comment  &#39;邮箱验证码&#39;,

email_chkcode_time  int  unsigned  not  null comment  &#39;邮箱验证码生成时间&#39;,

key  email_chkcode(email_chkcode)
Copier après la connexion

4. Modifier l'inscription, l'e-mail doit être renseigné

Modifier le formulaire d'inscription, ajouter un champ d'e-mail ; modifier le modèle de membre, autoriser l'insertion du champ d'e-mail et ajouter un champ d'e-mail comme règle de vérification pour l'e-mail. .

5. Générez un code de vérification par e-mail avant l'inscription

Dans la méthode _before_insert()

                   //生成email验证码

                   $data[&#39;email_chkcode&#39;]= md5(uniqid());

                   $data[&#39;email_chkcode_time&#39;]= time();
Copier après la connexion

6 Après l'inscription, envoyez le code de vérification à l'adresse e-mail de l'utilisateur<🎜. >

         /**

          * 注册后的钩子函数

          */

         protected function _after_insert($data,$option)

         {

                   $content = "欢迎注册,请点击以下完成验证:<p><a href=&#39;http://www.php2.com/eshop/index.php/Home/Member/email_chk/code/{$data[&#39;email_chkcode&#39;]}&#39;>请点击</a></p>";

                   sendMail($data[&#39;email&#39;],&#39;php2网站邮箱验证&#39;, $content);

         }
Copier après la connexion

7.           Ajoutez une méthode dans le contrôleur de membre pour terminer la vérification

    /**

     * 完成邮箱验证方法

     */

    public function email_chk()

    {

        //接收验证码

        $code = I(&#39;get.code&#39;);

        //查询这个验证码是否有效

        $member = D(&#39;Admin/Member&#39;);

        $info = $member->field(&#39;id,email_chkcode_time&#39;)->where(array(

            &#39;email_chkcode&#39; => $code,

        ))->find();

        if($info)

        {

            if((time() -$info[&#39;email_chkcode_time&#39;]) > 86400)

            {

                //帐号过期,删除这个帐号

               $member->delete($info[&#39;id&#39;]);

                $this->error(&#39;验证码已过期,帐号已经删除,请重新注册&#39;, U(&#39;regist&#39;));

                exit;

            }

            else

            {

                //验证通过,将验证码清空

                $member->where(array(

                    &#39;id&#39; => $info[&#39;id&#39;],

               ))->setFielf(&#39;email_chkcode&#39;, &#39;&#39;);

                $this->success(&#39;验证通过,请登陆&#39;, U(&#39;login&#39;));

                exit;

            }

        }

        else

        {

            $this->error(&#39;参数错误&#39;, U(&#39;/&#39;));

            exit;

        }

    }
Copier après la connexion

8.         Modifiez la méthode de connexion dans le modèle de membre

         //判断这个帐号是否通过验证码验证

         if(!empty($user[&#39;email_chkcode&#39;]))

         {

                   $this->error= &#39;必须验证后才可以登陆&#39;;

                   returnfalse;

         }
Copier après la connexion

9.         Modifiez le code d'enregistrement

Si un compte existe déjà, mais il a expiré et n'a pas été vérifié Vous pouvez supprimer ce compte.

Ajoutez une vérification du formulaire lors de l'inscription, ainsi qu'une vérification de l'unicité et du code de vérification de l'inscription pour le nom d'utilisateur et l'adresse e-mail.

array('email','chk_un_email', 'email existe déjà !', 1,'callback', 3),

array('username','chk_un_user', 'User Le nom existe déjà !', 1,'callback', 3),

         //验证已经存在的邮箱是否通过验证

         public function chk_un_email()

         {

                   $email = I(&#39;post.email&#39;);

                   $username =I(&#39;post.username&#39;);

                   $hasEmail =$this->field(&#39;id,email_chkcode,email_chkcode_time&#39;)->where(array(

                            &#39;email&#39; =>$email,

                   ))->find();

                   if($hasEmail)

                   {

                            if(empty($hasEmail[&#39;email_chkcode&#39;]))

                            {

                                     returnfalse;

                            }

                            else

                            {

                                     if(time() -$hasEmail[&#39;email_chkcode_time&#39;] > 86400)

                                     {

                                               $this->delete($hasEmail[&#39;id&#39;]);

                                               returntrue;

                                     }

                                     else

                                     {

                                               returnfalse;

                                     }

                            }

                   }

                   else

                   {

                            return true;

                   }

         }



         //验证已经存在的用户名是否通过验证

         public function chk_un_user()

         {

                   $username =I(&#39;post.username&#39;);

                   $hasUsername =$this->field(&#39;id,email_chkcode,email_chkcode_time&#39;)->where(array(

                            &#39;username&#39; =>$username,

                   ))->find();

                   if($hasUsername)

                   {

                            if(empty($hasUsername[&#39;email_chkcode&#39;]))

                            {

                                     returnfalse;

                            }

                            else

                            {

                                     if(time() -$hasUsername[&#39;email_chkcode_time&#39;] > 86400)

                                     {

                                               $this->delete($hasUsername[&#39;id&#39;]);

                                               returntrue;

                                     }

                                     else

                                     {

                                               returnfalse;

                                     }

                            }

                   }

                   else

                   {

                            return true;

                   }

         }
Copier après la connexion
Test

.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
php
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal