ホームページ > バックエンド開発 > PHPの問題 > PHP は電子メール検証を実装します

PHP は電子メール検証を実装します

藏色散人
リリース: 2023-03-06 10:58:01
オリジナル
6529 人が閲覧しました

php で電子メール検証を実装する方法: まず phpMailer をダウンロードし、次にそれをプロジェクトのルート ディレクトリに解凍し、次にメール サーバーが必要になります。最後に「config.php」に電子メール関連の情報を設定してファイルを作成します。送信方法はメールのpublicメソッドで大丈夫です。

PHP は電子メール検証を実装します

推奨: 「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(&#39;haha@163.com&#39;,&#39;phptestemail&#39;, &#39;<a href="http://www.phptest.com">hahahah</a>&#39;));
ログイン後にコピー

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)
ログイン後にコピー

4. 登録を変更します。電子メールを入力する必要があります

登録フォームを変更し、電子メール フィールドを追加します。電子メール フィールドの挿入を許可するようにメンバー モデルを変更し、検証を追加します。電子メールフィールドのルールを電子メールとして指定します。

5. 登録前に電子メール検証コードを生成します

_before_insert() メソッド内で

                   //生成email验证码

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

                   $data[&#39;email_chkcode_time&#39;]= time();
ログイン後にコピー

6. 登録後、ユーザーの電子メール アドレスに検証コードを送信します

         /**

          * 注册后的钩子函数

          */

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

         }
ログイン後にコピー

7. MEMBER コントローラーの追加方法の確認完了

    /**

     * 完成邮箱验证方法

     */

    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;

        }

    }
ログイン後にコピー

8. メンバーシップモデルでのログイン方法の変更

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

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

         {

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

                   returnfalse;

         }
ログイン後にコピー

9. 登録コードの変更

アカウントがすでに存在する場合 アカウントは存在しますが、有効期限が切れており、認証されていません。このアカウントは削除できます。

登録時にフォーム検証を追加し、ユーザー名と電子メールの一意性と登録検証コードの検証を追加します。

array('email','chk_un_email', 'email はすでに存在します!', 1,'callback', 3),

名前はすでに存在します!', 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;

                   }

         }
ログイン後にコピー

10.テスト

以上がPHP は電子メール検証を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート