ユーザーがメール アドレスを入力して送信をクリックすると、jQuery はまずメールの形式が正しいかどうかを確認します。そうです。バックグラウンドで Sendmail.php を渡し、Ajax リクエストを送信します。sendmail.php は、メールボックスが存在するかどうかを確認して電子メールを送信し、対応する処理結果をフロントエンド ページに返します。
jQueryコード:
-
- $(function(){
- $("#sub_btn").click(function(){
- var email = $("#email").val();
- var preg = /^w+ ([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*/; //メールに一致
- if(email=='' || !preg.test( email)){
- $("#chkmsg").html("正しいメールアドレスを入力してください!");
- }else{
- $("#sub_btn").attr("無効","無効") .val ('送信中..').css("カーソル","デフォルト");
- $.post("sendmail.php",{mail:email},function(msg){
- if(msg==" noreg "){
- $("#chkmsg").html("このメール アドレスはまだ登録されていません!");
- $("#sub_btn").removeAttr("disabled").val('Submit') .css("カーソル ","ポインター");
- }else{
- $(".demo").html("
"+msg+"");
- }
- }) ;
- })
-
-
-
コードをコピー
上記で使用されている jQuery コードは、フロントエンドの対話型操作を完了するのに非常に便利で簡潔です。ある程度の jQuery の基礎がある場合、上記のコードは一目瞭然であり、多くの説明は必要ありません。
もちろん、jQuery ライブラリ ファイルをページに読み込むことを忘れないでください。
sendmail.php は、電子メールがシステムのユーザー テーブルに存在するかどうかを確認する必要があります。存在する場合は、ユーザー情報を読み取り、md5 を使用してユーザー ID、ユーザー名、パスワードを暗号化し、パスワードを取得するための検証コードとして特別な文字列を生成します。次に URL を構築します。
同時に、URL リンクの適時性を制御するために、パスワード取得アクションを送信したユーザーの操作時間が記録され、最後に電子メール送信クラスが呼び出され、ユーザーのメールボックスに電子メールが送信されます。
この記事で提供されているソース コード パッケージ内のクラス smtp.class.php を電子メールで送信します。
例:
-
- include_once("connect.php");//データベースに接続します
-
- $email =tripslashes(trim($_POST['mail']));
-
- $sql = "select id,username,password from `t_user` where `email`='$email'
- $num = mysql_num_rows($query); ){ //このメール アドレスはまだ登録されていません。
- echo 'noreg';
- }else{
- $row = mysql_fetch_array($query);
- $uid = $row['id']; uid.$row['username'].$row['password']);//結合された検証コード
- $url = "http://bbs.it-home.org/demo/resetpass/reset.php?email =".$email."
- &token=".$token;//URL を構築する
- $time = date('Y-m-d H:i');
- $result = sendmail($time,$email,$url);
- if($result==1){//メールは正常に送信されました
- $msg = 'システムはメールボックスにメールを送信しました
メールボックスにログインしてパスワードをリセットしてください。 ';
- //データ送信時刻を更新します
- mysql_query("update `t_user` set `getpasstime`='$getpasstime' where id='$uid '");
- $msg = $result; echo $msg;
-
- //メールを送信
- function sendmail($time,$email,$url){
- include_once("smtp.class.php")
- $smtpserver = ""; smtp.163.com など
- $smtpserverport = 25; //SMTP サーバーのポート
- $smtpusermail = ""; //SMTP サーバーのユーザーの電子メール
- $smtpuser = "" //SMTP サーバーのユーザー アカウント
- $smtppass = " ; //SMTP サーバーのユーザー パスワード
- $smtp = new Smtp($smtpserver, $smtpserverport, true, $smtpuser, $smtppass); // ここで true は認証が使用されることを意味し、それ以外の場合は認証が使用されません。
- $emailtype = "HTML"; //メールの種類、テキスト: テキスト;
- $smtpemailto = $smtpusermail;
- $emailsubject = "jbxue.com - パスワードの取得"; emailbody = "Dear".$email.":
「.$time.」にパスワード取得リクエストを送信しました。パスワードをリセットするには、下のリンクをクリックしてください
- (ボタンは 24 時間以内に有効です) .
".$url."";
- $rs = $smtp->sendmail ($smtpemailto, $smtpemailfrom, $emailsubject, $emailbody, $emailtype);
-
- return $rs;
-
-
- コードをコピー
-
-
- この時点で、あなたのメールボックスは jbxue からパスワード取得メールを受け取ります。電子メールの内容にある URL リンクをクリックして、jbxue.com のreset.php へのリンクをクリックして電子メールを確認します。
-
- 例:
-
-
-
-
-
include_once("connect.php");//データベースに接続します $token =tripslashes(trim($_GET['token'])); $email =tripslashes(trim($_GET) ['メール'])); $sql = "select * from `t_user` where email='$email'"; if( $row){ $mt = md5($row['id'].$row['username'].$row['password']); if($mt==$token){ if (time ()-$row['getpasstime']>24*60*60){ $msg = 'このリンクは期限切れです! '; }else{ //パスワードをリセット... $msg = 'パスワードをリセットして、パスワードのリセットフォームを表示してください。 これは単なるデモンストレーションですので、飛ばしてください。 '; - }
- }else{
- $msg = '無効なリンク';
- }
- }else{
- $msg = '不正なリンクです! ';
- }
- エコー $msg
-
-
- コードをコピーします
-
-
reset.php は、まずパラメータ email と token を受け取り、次に email に基づいてデータテーブル t_user にメールが存在するかどうかをクエリし、存在する場合はユーザーの情報を取得し、トークンと同じ方法でトークン値を構築します。 sendmail.php の組み合わせを使用して、URL によって渡されたトークンを比較します。現在の時刻と電子メールの送信時刻の差が 24 時間以上ある場合は、「リンクの有効期限が切れています!」というメッセージが表示されます。 、これはリンクが有効であることを意味し、最後にユーザーが新しいパスワードを設定したページに移動します。
概要: この記事の登録メール認証とメール経由のパスワード取得を通じて、Web サイト開発におけるメール送信の用途とその重要性がわかりました。もちろん、現在では SMS 認証アプリケーションも人気があり、これには関連する SMS インターフェイスのドッキングが必要です。
データテーブル t_user 構造:
-
- CREATE TABLE `t_user` (
- `id` int(11) NOT NULL auto_increment,
- `username` varchar(30) NOT NULL,
- `password` varchar(32) NOT NULL,
- `email` varchar(50) NOT NULL、
- `getpasstime` int(10) NOT NULL、
- PRIMARY KEY (`id`)
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
コードをコピー
|