この記事は、javamailsenderを介したメールボックス登録の検証で発生した問題から始まり、問題の原則と解決策を詳細に分析します。
電子メール登録の確認を使用して、デザインのアイデアを明確にする必要があります。
質問1:登録情報を送信した後、記入したメール番号にメールを送信する必要があります。
質問2:GETをリクエストするか検証コードを取得するかどうかにかかわらず、ユーザーはどのように電子メールが届きますか?
質問3:電子メールのアクティブ化の有効な時間を設定する方法
上記の3つの質問を通じて、ブロガーは誰もがjavamailsenderのメールボックスの確認をマスターするのに役立ちます
質問1
指定されたメールボックス番号にメールを送信する方法を最初に解決する必要があります
POMに次の依存関係を追加します。
<! - 電子メール - > <依存関係> <GroupId> javax.mail </groupId> <artifactid>メール</artifactid> <バージョン> 1.4.7 </version> </dependency>
そうです、Javaxを使用してパッケージ内のメール依存関係を拡張するため、コードの間違ったインポートを選択しないでください。
このコードは簡単で簡単に理解できます
上から下へ、最初にインターフェイスを見てみましょう。
@requestMapping(value = "myajaxregister")@responsebody public string sendemail(@requestparam string email){user user = new user( "luxiaotao"、 "0331"); new shood(){@override public void run(){emailservice.senemail(user、email); } }。始める(); 「電子メールがメールアドレスに送信された」と返されます。アクティブにしてください」。 }それがテストであるため、ブロガーはユーザーから偽のデータを作成しており、電子メールを取得することが重要です
ユーザーのエクスペリエンスを改善するためにメール送信方法を実行する新しいスレッドを作成する
それが非同期ではない場合、ユーザーはページがリダイレクトされる前に電子メールが送信されるのを待つ必要があります。
メールを送信するビジネス層の方法を見てみましょう。
@Override public boolean senemail(user user、string email){try {javamailsenderimpl mailsender = new javamailsenderimpl(); mailsender.sethost( "smtp.163.com"); mailsender.setUsername( "163メールボックスアカウントに入力してください"); MailSender.setPassWord( "163メールボックスパスワード"); mimemessage mailmessage = mailsender.createmimemessage(); mimemessagehelper helper = new mimemessagehelper(mailmessage、true、 "gbk"); helper.setfrom(mailsender.getusername()); helper.setto(電子メール); helper.setsubject( "title"); helper.settext( "メール送信に正常に送信");文字列emailtoken = getemailtoken(user); string url = "<a href = 'http:// localhost:8088/activatemail?emailtoken ="+emailtoken+"'> activate"+"</a> </br> <h1>上記のハイパーコネクションにアクセスできない場合は、Browserの住所に次のURLをコピーしてくださいbar </h1> <h2> http:// localhost:8088/activatemail?emailtoken = "+emailtoken+" </h2> "; helper.settext(url、true); mailsender.send(mailmessage); trueを返します。 } catch(Exception e){e.printstacktrace(); falseを返します。 }}この方法で説明します:
1.サーバーメールボックスがQQメールボックスの場合、 mailSender.setHost("smtp.qq.com");
2.mimemessagehelperは、Javaxの下でのメールの拡張機能クラスです。 Springカプセル化されたメールを使用している場合、必要はありません。 Springメールを使用すると、設定方法は異なります
3. helper.setText(url,true);現在の文字列がHTML形式であるため、タグが機能することを意味します
4。TheGeteMailToken getEmailToken(user);方法については以下で説明します
これまでのところ、メールは正常に送信できます。便利なため、HTMLページコードを提供します。
<!doctype html> <html lang = "en"> <head> <meta charset = "utf-8"> <title> title> title> </title> </head> <body> <form method = "get" action = "/myajaxregister"/myajaxregister "/myajaxregister"/myajaxregister "
質問2
Get要求されたAPIを使用してメールをアクティブ化する方法は?
問題1では、 senEmail()の下のgetEmailToken(user)使用してアクティブになります
senEmail()から送信された電子メールコンテンツはハイパーリンクであり、アクティベーションインターフェイスを開始するために使用されます。
しかし、これはgetEmailToken(user)と何の関係があるのか
文字通りの意味からわかるように、ここでトークンを使用します
最初にアクティベーションコントローラーを見てください
@RequestMapping(value = "ActivateMail")public string activateMail(@RequestParam String EmailToken){if(emailService.balancetoken(emailToken)){return "success"; } "error1"を返します。 }ハイパーリンクを介して、サーバーに電子メールトーンパラメーターを送信します
サーバーがこのトークンを取得した後、ローカルトークンと比較されます。同じことが当てはまる場合、検証に合格します。
ここでは、Redisを使用してキャッシュを使用し、トークンをキーおよびユーザー情報(ユーザー)として値として使用します
2つの方法を見てみましょう。
@Override public String getemailtoken(user user){string token = uuid.randomuid()。toString(); string value = user.toString(); redistemplate.opsforvalue()。set(token、value);トークンを返します。 } @Override public boolean balancetoken(string emailtoken){if(redistemplate.opsforvalue()。get(emailtoken)!= null){return true; } falseを返します。 }最初の方法では、Redisを使用してユーザー情報を文字列に変換し、メモリに保存します
2番目の方法は、検証をアクティブにし、キー(トークン)を使用して、Redisに値があるかどうかを確認し、Trueを正常に返すことです。
質問3
では、電子メール検証の有効期間を設定した場合はどうなりますか?
そうは言っても、頻繁にレディスを使用する学生はおそらくそれを推測しています
getEmailToken()にコードの行を追加するだけです。
@Override public String getemailtoken(user user){string token = uuid.randomuid()。toString(); string value = user.toString(); redistemplate.opsforvalue()。set(token、value); redistemplate.expire(token、60、timeunit.seconds);トークンを返します。 }はい、 redisTemplate.expire()を使用して、現在のキー値ペアの有効期限を設定します
最後に、アクティベーションメールを見てみましょう。
上記は、今回導入されたjavamailsenderの電子メール登録確認の実装の内容全体です。まだわからない場合は、以下のメッセージ領域で説明できます。