Este artículo comienza con el problema encontrado en la verificación de registro del buzón a través de Javamailsender, y analiza los principios y soluciones a los problemas en detalle.
Usando la verificación de registro de correo electrónico, necesitamos aclarar las ideas de diseño:
Pregunta 1: Después de enviar la información de registro, debe enviar un correo electrónico al número de correo electrónico que completó.
Pregunta 2: ¿Cómo se activa el usuario cuando llega el correo electrónico, si solicitará u obtiene el código de verificación (este artículo usa la interfaz Get para activarlo)
Pregunta 3: Cómo establecer el tiempo válido para la activación del correo electrónico
A través de las tres preguntas anteriores, el blogger ayudará a todos a maestros de verificación del buzón de javamailsender
Pregunta 1
Primero necesito resolver cómo enviar correos electrónicos al número de buzón especificado
Agregue las siguientes dependencias al POM:
<
Así es, usamos Javax para expandir las dependencias de correo en el paquete, así que no elija la importación incorrecta en el código.
Este código es simple y fácil de entender para todos
De arriba a abajo, veamos primero la interfaz:
@RequestMapping (valor = "myajaxregister") @ResponseBody String public Send SendEmail (@RequestParam String Correo electrónico) {usuario user = nuevo usuario ("Luxiaotao", "0331"); new Thread () {@Override public void run () {EageService.SenEmail (usuario, correo electrónico); } }.comenzar(); devolver "El correo electrónico se ha enviado a su dirección de correo electrónico, active"; }Debido a que es una prueba, el blogger ha creado datos falsos de los usuarios, y recibir correo electrónico es la clave
Cree un nuevo hilo para ejecutar el método de envío de correo para mejorar la experiencia del usuario
Imagínese si no es asíncrono, el usuario debe esperar a que se envíe el correo electrónico antes de que la página sea redirigida.
Echemos un vistazo al método de capa de negocios para enviar correos electrónicos:
@Override public boolean senemail (usuario de usuario, correo electrónico de cadena) {try {javamailsenderImpl mailsender = new javamailsenderImpl (); Mailsender.sethost ("smtp.163.com"); MailSender.setUsername ("Complete su cuenta de 163 buzón"); Mailsender.setPassword ("163 contraseña de buzón"); Mimemessage mailmessage = mailsender.createMeMeMessage (); MimemessageHelper Helper = new MimemessageHelper (MailMessage, verdadero, "GBK"); Helper.setFrom (MailSender.GetUsername ()); Helper.setto (correo electrónico); helper.setsubject ("título"); Helper.setText ("Envío de correo correcto"); String CORREA ELECTRODOKIN = GetEmailToken (usuario); String url = "<a href = 'http: // localhost: 8088/activateMail? CagerToKen ="+Correo electrónico: ", activar"+"</a> </br> <h1> Si no se puede acceder la hiperconección anterior, copie la siguiente URL a la dirección de la navegación Bar </h1> <h2> http: // localhost: 8088/activateMail? CORREA ELECHTOKIN = "+CORREA ELECHTOKen+" </h2> "; helper.settext (url, verdadero); Mailsender.send (MailMessage); devolver verdadero; } catch (Exception e) {E.PrintStackTrace (); devolver falso; }} Este método explica:
1. Si el buzón de su servidor es un buzón QQ, modifíquelo a: mailSender.setHost("smtp.qq.com");
2.MimemessageHelper es una clase de extensión para el correo bajo Javax. Si usa el correo de primavera encapsulado, no lo necesita. Si usa Spring Mail, el método establecido será diferente
3. El segundo parámetro verdadero de helper.setText(url,true); significa que la cadena actual está en formato HTML, por lo que las etiquetas funcionarán
4. getEmailToken(user); El método se discutirá a continuación
Hasta ahora, el correo electrónico se puede enviar normalmente. En aras de la conveniencia, doy el código de página HTML:
<! Doctype html> <html lang = "en"> <head> <meta charset = "utf-8"> <title> title </title> </head> <body> <form method = "get" action = "/myajaxregister"> correo electrónico <input type = "text" name = "correo electrónico"> </br> <type de entrada = "enviar" valor = "registrar"> </form> </body> </html>
Pregunta 2
¿Cómo activar el correo utilizando la API solicitada?
En la pregunta 1, getEmailToken(user) bajo senEmail() se utiliza para activar
Se puede ver que el contenido de correo electrónico enviado por senEmail() es un hipervínculo, que se utiliza para iniciar nuestra interfaz de activación.
Pero, ¿qué tiene esto que ver con getEmailToken(user)
Como se puede ver desde el significado literal, usaremos una ficha aquí
Primera mira al controlador de activación
@RequestMapping (value = "activateMail") public String activateMail (@RequestParam String Correo electrónico) {if (EageService.BalancToken (Correo electrónico)) {return "Success"; } return "Error1"; } A través del hipervínculo, enviamos un parámetro de correo electrónico al servidor
Después de que el servidor obtenga este token, se comparará con el token local. Si lo mismo es cierto, pasará la verificación.
Aquí uso redis para almacenar en caché y uso el token como clave e información del usuario (usuario) como valor
Veamos dos métodos:
@Override public String getEmailToken (usuario de usuario) {string token = uuid.randomuuid (). ToString (); Valor de cadena = user.toString (); redistemplate.opsforvalue (). set (token, valor); token de regreso; } @Override public boolean BalancTokoken (String CageicToken) {if (redistemplate.opsforValue (). Get (Correo electrónico)! = NULL) {return true; } return false; } El primer método utiliza Redis para convertir la información del usuario en cadena y almacenarla en la memoria
El segundo método es activar la verificación y usar la clave (token) para verificar si hay un valor en Redis y devolver con éxito verdadero.
Pregunta 3
Entonces, ¿qué pasa si establece el período de validez de verificación por correo electrónico?
Dicho esto, los estudiantes que a menudo usan Redis probablemente lo hayan adivinado
Simplemente agregue una línea de código a getEmailToken() :
@Override public String getEmailToken (usuario de usuario) {string token = uuid.randomuuid (). ToString (); Valor de cadena = user.toString (); redistemplate.opsforvalue (). set (token, valor); Redistemplate.EXPIRE (Token, 60, TimeUnit.seconds); token de regreso; } Sí, use redisTemplate.expire() para establecer el tiempo de vencimiento del par de valor clave actual
Finalmente, echemos un vistazo al correo electrónico de activación:
Lo anterior es todo el contenido de la implementación de Javamailsender de la verificación de registro de correo electrónico introducida esta vez. Si aún no lo entiende, puede discutirlo en el área de mensajes a continuación.