Dieser Artikel beginnt mit dem Problem, das durch Javamailsender in der Registrierungsprüfung von Mailbox auftritt, und analysiert die Prinzipien und Lösungen für die detaillierten Probleme.
Mithilfe der E -Mail -Registrierungsüberprüfung müssen wir die Designideen klären:
FRAGE 1: Nach dem Einreichen der Registrierungsinformationen müssen Sie eine E -Mail an die von Ihnen ausgefüllte E -Mail -Nummer senden.
Frage 2: Wie aktiviert der Benutzer, wenn die E -Mail eintrifft, ob er den Verifizierungscode erhalten oder abrufen soll (in diesem Artikel wird die GET -Schnittstelle verwendet, um ihn zu aktivieren).
Frage 3: So legen Sie die gültige Zeit für die E -Mail -Aktivierung fest
Über die oben genannten drei Fragen hilft der Blogger allen, Javamailsender -Mailbox -Überprüfung zu beherrschen
Frage 1
Ich muss zuerst lösen, wie Sie E -Mails an die angegebene Postfachnummer senden können
Fügen Sie der POM die folgenden Abhängigkeiten hinzu:
<!-E-Mail-> <De vor Ort> <gruppe> javax.mail </Groupid> <artifactId> mail </artifactId> <version> 1.4.7 </Version> </abhängig>
Das ist richtig, wir verwenden Javax, um die Mail -Abhängigkeiten im Paket zu erweitern. Wählen Sie also nicht den falschen Import im Code.
Dieser Code ist für jeden einfach und einfach zu verstehen
Schauen wir uns zunächst von oben nach unten die Schnittstelle an:
@RequestMapping (value = "myajaxRegister") @ResponseBody public String sendemail (@RequestParam -String -E -Mail) {user user = new user ("luxiaotao", "0331"); neuer Thread () {@Override public void run () {E -MailService.senemail (Benutzer, E -Mail); } }.Start(); Gibt zurück "Die E -Mail wurde an Ihre E -Mail -Adresse gesendet, bitte aktivieren". }Da es sich um einen Test handelt, hat der Blogger gefälschte Daten von Benutzern erstellt, und eine E -Mail ist der Schlüssel
Erstellen Sie einen neuen Thread, um die E -Mail -Sendungsmethode auszuführen, um die Erfahrung des Benutzers zu verbessern
Stellen Sie sich vor, es ist nicht asynchron, der Benutzer muss warten, bis die E -Mail gesendet wird, bevor die Seite umgeleitet wird.
Schauen wir uns die Geschäftsschichtmethode zum Senden von E -Mails an:
@Override public boolean senemail (Benutzerbenutzer, String -E -Mail) {try {JavamailSenderImpl MailSender = new JavamailSenderImpl (); MailSender.Sethost ("SMTP.163.com"); MailSender.Setusername ("Füllen Sie Ihr 163 Mailbox -Konto ein"); MailSender.SetPassword ("163 Mailbox -Passwort"); Mimemessage mailMessage = mailsender.createMimemessage (); MimemessageHelper helfer = new mimemessageHelper (mailMessage, true, "gbk"); Helper.setfrom (MailSender.getUserName ()); Helper.setto (E -Mail); Helper.Setsubject ("Titel"); Helper.setText ("Mail -Senden erfolgreich"); String EmailToken = getemailToken (Benutzer); String url = "<a href = 'http: // localhost: 8088/activatemail? EmailToken ="+E -MailToken+"'> aktivieren"+"</a> </br> <h1> Wenn auf die obige Hyperkonnection nicht zugegriffen werden kann, kopieren Sie bitte die folgende URL in die Browser -Adressadressadresse, um die folgende URL in die Browser -Adresse zu kopieren, die die folgende URL in die Browser -Adressadressadresse kopieren kann. Bar </h1> <h2> http: // localhost: 8088/activeatemail? EmailToken = "+E -MailToken+" </h2> "; helper.setText (url, true); MailSender.Send (MailMessage); zurückkehren; } catch (Ausnahme e) {e.printstacktrace (); false zurückgeben; }} Diese Methode erklärt:
1. Wenn Ihr Server -Mailbox ein QQ -Mailbox ist, ändern Sie es in: mailSender.setHost("smtp.qq.com");
2.MimemessAnehelper ist eine Erweiterungsklasse für Mail unter Javax. Wenn Sie die von Spring eingefeilte E -Mail verwenden, benötigen Sie sie nicht. Wenn Sie Spring Mail verwenden, ist die SET -Methode unterschiedlich
3. Der zweite Parameter true von helper.setText(url,true); bedeutet, dass sich die aktuelle Zeichenfolge im HTML -Format befindet, sodass die Tags funktionieren
V. getEmailToken(user); Die Methode wird unten erörtert
Bisher kann die E -Mail normal gesendet werden. Aus Gründen der Bequemlichkeit gebe ich den HTML -Seitencode:
<! DocType html> <html Lang = "en"> <head> <meta charset = "utf-8"> <title> title </title> </head> <body> <Formmethode = "Get" action = "/myajaxregister"> E-Mail <Eingabe-Typ "text" name = "name =" E-Mail "> </br> </put type =" value = "register"> </form> </body> </html>
Frage 2
Wie aktiviere ich E -Mails mit der GET Anforderten API?
In Frage 1 wird getEmailToken(user) unter senEmail() verwendet, um zu aktivieren
Es ist zu sehen, dass der von senEmail() gesendete E -Mail -Inhalt ein Hyperlink ist, der verwendet wird, um unsere Aktivierungsschnittstelle zu starten.
Aber was hat das mit getEmailToken(user) zu tun
Wie aus der wörtlichen Bedeutung ersichtlich ist, werden wir hier ein Token verwenden
Schauen Sie sich zunächst den Aktivierungscontroller an
@RequestMapping (value = "activeatemail") public String activeAtemail (@RequestParam String EmailToken) {if (E -MailService.BalancEtoken (EmailToken)) {return "Erfolg"; } return "error1"; } Über den Hyperlink senden wir einen E -Mail -teoken -Parameter an den Server
Nachdem der Server dieses Token erhalten hat, wird er mit dem lokalen Token verglichen. Wenn dies zutrifft, wird dies überprüft.
Hier verwende ich Redis zum Cache und benutze Token als Schlüssel- und Benutzerinformationen (Benutzer) als Wert
Sehen wir uns zwei Methoden an:
@Override public String getemailToken (Benutzerbenutzer) {String token = uUid.randomuuid (). ToString (); String value = user.toString (); redistemplate.opsforValue (). set (Token, Wert); Rückgabe -Token; } @Override public boolean balancetoken (String E -Mail -teoken) {if (redistemplate.opsforValue (). Get (EmailToken)! = Null) {return true; } return false; } Die erste Methode verwendet Redis, um Benutzerinformationen in Zeichenfolge umzuwandeln und im Speicher zu speichern
Die zweite Methode besteht darin, die Überprüfung zu aktivieren und Schlüssel (Token) zu überprüfen, um zu prüfen, ob Redis einen Wert gibt, und erfolgreich true zurückzugeben.
Frage 3
Was ist, wenn Sie die Gültigkeitsdauer der E -Mail -Überprüfung festlegen?
Trotzdem haben Schüler, die Redis oft verwenden, wahrscheinlich erraten
Fügen Sie einfach eine Codezeile hinzu, um getEmailToken() zu erhalten:
@Override public String getemailToken (Benutzerbenutzer) {String token = uUid.randomuuid (). ToString (); String value = user.toString (); redistemplate.opsforValue (). set (Token, Wert); redistemplate.expire (Token, 60, TimeUnit.Seconds); Rückgabe -Token; } Ja, verwenden Sie redisTemplate.expire() um die Ablaufzeit des aktuellen Schlüsselwertpaares festzulegen
Schauen wir uns schließlich die Aktivierungs -E -Mail an:
Das obige ist der gesamte Inhalt der diesmal eingeführten Implementierung der E -Mail -Registrierungsüberprüfung durch Javamailsender durch die E -Mail -Registrierung. Wenn Sie immer noch nicht verstehen, können Sie es im Nachrichtenbereich unten besprechen.