Cet article commence par le problème rencontré dans la vérification d'enregistrement des boîtes aux lettres via Javamailssender et analyse les principes et les solutions aux problèmes en détail.
En utilisant la vérification de l'enregistrement des e-mails, nous devons clarifier les idées de conception:
Question 1: Après avoir soumis les informations d'inscription, vous devez envoyer un e-mail au numéro de messagerie que vous avez rempli.
Question 2: Comment l'utilisateur s'actitive
Question 3: Comment définir le temps valide pour l'activation des e-mails
Grâce aux trois questions ci-dessus, le blogueur aidera tout le monde à maîtriser la vérification de la boîte aux lettres Javamailssender
Question 1
J'ai d'abord besoin de résoudre comment envoyer des e-mails au numéro de boîte aux lettres spécifié
Ajoutez les dépendances suivantes au POM:
<! - Courriel -> <dependency> <proupId> javax.mail </rompuprid> <ArtefactId> Mail </ Artifactid> <DERSE> 1.4.7 </DERNIFRIMINE> </DENDENCENCE>
C'est vrai, nous utilisons Javax pour étendre les dépendances du courrier dans le package, alors ne choisissez pas la mauvaise importation dans le code.
Ce code est simple et facile à comprendre pour tout le monde
De haut en bas, regardons d'abord l'interface:
@Requestmapping (value = "myajaxregister") @ResponseBody public String SendEmail (@RequestParam String e-mail) {utilisateur utilisateur = new user ("luxiaotao", "0331"); nouveau thread () {@Override public void run () {e-mailservice.senemail (utilisateur, e-mail); } }.commencer(); Renvoie "l'e-mail a été envoyé à votre adresse e-mail, veuillez activer"; }Parce qu'il s'agit d'un test, le blogueur a créé de fausses données des utilisateurs et recevoir un e-mail est la clé
Créez un nouveau fil pour exécuter la méthode d'envoi de courrier pour améliorer l'expérience de l'utilisateur
Imaginez que s'il n'est pas asynchrone, l'utilisateur doit attendre que l'e-mail soit envoyé avant que la page ne soit redirigé.
Jetons un coup d'œil à la méthode de la couche commerciale pour envoyer des e-mails:
@Override public booléen Senemail (utilisateur utilisateur, courriel de chaîne) {try {javamailssempl MailSender = new JavamailSenderImpl (); MailSender.Sethost ("SMTP.163.com"); MailSender.SetUserName ("Remplissez votre compte 163 Mailbox"); MailSender.SetPassword ("163 Mot de passe de boîte aux lettres"); MimeMessage MailMessage = MailSender.CreateMimeMessage (); MimeMessageHelper Helper = new MimeMessageHelper (MailMessage, true, "gbk"); helper.setFrom (mailSender.getUsername ()); helper.setto (e-mail); helper.setsubject ("titre"); helper.setText ("mail Envoi avec succès"); String EmailToken = GetEmailToken (utilisateur); String url = "<a href = 'http: // localhost: 8088 / activemail? E-mail =" + emailtoken + "'> activer" + "</a> </br> <h1> Si l'hyperconnection ci-dessus ne peut pas être accessible, veuillez copier l'URL suivant à l'adresse du navigateur ci-dessus bar </h1> <h2> http: // localhost: 8088 / actiatemail? e-mail = "+ emailtoken +" </h2> "; helper.settext (URL, true); MailSender.Send (MailMessage); Retour Vrai; } catch (exception e) {e.printStackTrace (); retourne false; }} Cette méthode explique:
1. Si la boîte aux lettres de votre serveur est une boîte aux lettres QQ, modifiez-la sur: mailSender.setHost("smtp.qq.com");
2.MimeMessageHelper est une classe d'extension pour le courrier sous Javax. Si vous utilisez le courrier encapsulé Spring, vous n'en avez pas besoin. Si vous utilisez Spring Mail, la méthode définie sera différente
3. Le deuxième paramètre vrai de helper.setText(url,true); signifie que la chaîne actuelle est au format HTML, donc les balises fonctionneront
4. getEmailToken(user); La méthode sera discutée ci-dessous
Jusqu'à présent, l'e-mail peut être envoyé normalement. Par souci de commodité, je donne le code de page HTML:
<! Doctype html> <html lang = "en"> <éread> <meta charset = "utf-8"> <itle> title </ title> </ head> <body> <form metheth = "get" action = "/ myajaxregister"> email <entrée type = "text" name = "e-mail"> </br> <entrée type = "soumis" value = "registre"> </ form> </ body> </html>
Question 2
Comment activer le courrier à l'aide de l'API Get demandé?
Dans la question 1, getEmailToken(user) sous senEmail() est utilisé pour activer
On peut voir que le contenu e-mail envoyé par senEmail() est un hyperlien, qui est utilisé pour démarrer notre interface d'activation.
Mais qu'est-ce que cela a à voir avec getEmailToken(user)
Comme on peut le voir du sens littéral, nous utiliserons un jeton ici
Regardez d'abord le contrôleur d'activation
@RequestMapping (value = "ActivateMail") String public activateMail (@RequestParam String e-mail) {if (e-mailservice.balanceToken (emailToken)) {return "Success"; } return "error1"; } Grâce à l'hyperlien, nous envoyons un paramètre EmailToken au serveur
Une fois que le serveur a obtenu ce jeton, il se comparera au jeton local. Si la même chose est vraie, elle passera la vérification.
Ici, j'utilise Redis pour me cacher et j'utilise le jeton comme information clé et utilisateur (utilisateur) comme valeur
Voyons deux méthodes:
@Override public String getEmailToken (utilisateur utilisateur) {String token = uuid.randomuuid (). ToString (); String Value = User.ToString (); reidemplate.opsforvalue (). set (token, valeur); Token de retour; } @Override public boolean BalanceToken (String emailToken) {if (reidemplate.opsforvalue (). Get (emailToken)! = Null) {return true; } return false; } La première méthode utilise Redis pour convertir les informations de l'utilisateur en chaîne et la stocker en mémoire
La deuxième méthode consiste à activer la vérification et à utiliser la clé (jeton) pour vérifier s'il y a une valeur dans Redis et à renvoyer avec succès.
Question 3
Et si vous définissez la période de validité de la vérification des e-mails?
Cela dit, les étudiants qui utilisent souvent Redis l'ont probablement deviné
Ajoutez simplement une ligne de code pour getEmailToken() :
@Override public String getEmailToken (utilisateur utilisateur) {String token = uuid.randomuuid (). ToString (); String Value = User.ToString (); reidemplate.opsforvalue (). set (token, valeur); Redistemplate.Expire (Token, 60, timeUnit.seconds); Token de retour; } Oui, utilisez redisTemplate.expire() pour définir le temps d'expiration de la paire de valeurs clés actuelle
Enfin, jetons un coup d'œil à l'e-mail d'activation:
Ce qui précède est l'intégralité du contenu de la mise en œuvre par Javamailssender de la vérification d'enregistrement des e-mails présenté cette fois. Si vous ne comprenez toujours pas, vous pouvez en discuter dans la zone de message ci-dessous.