SpringBoot usa el correo de configuración y el combate real (super detallado)

1. Introducción

        Cuando configuré recientemente a una niña de la escuela, implicó restablecer la contraseña, enviar la nueva contraseña al buzón de correo del usuario, usando un formato de correo simple, asunto y contenido.        
        El envío de correos electrónicos debe ser una de las funciones de extensión necesarias del sitio web, verificar el registro, olvidar la contraseña o enviar información de marketing a los usuarios. Normalmente usaremos la api relacionada con JavaMail para escribir código relacionado para enviar correo, pero ahora Springboot proporciona un conjunto de paquetes que son más fáciles de usar. (Este párrafo está tomado de Internet)
2. Agregar dependencias
        Agregar dependencia de correo en pom.xml
<!--mail-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

Vuelva a cargar la biblioteca de Maven. Después de cargar, aparecerá el jar relacionado con el correo. Quizás algunos amigos de IDEA hayan configurado el archivo pom para que se cargue automáticamente, por lo que no es necesario hacer clic en el botón de actualización en este momento.

 
3. Agregue la configuración de correo en Propiedades
        Aquí utilizo el correo QQ, el correo QQ es más común
# mail
spring.mail.host=smtp.qq.com   //QQ邮箱主机地址 ;136邮箱主机地址:smtp.163.com
spring.mail.port=587            //端口号
[email protected]        //发件人QQ邮箱,修改成个人的或者企业邮箱
spring.mail.password=woqybrryawjhieh            // 授权码,需要进入QQ邮箱设置中打开权限,获取此授权码
spring.mail.default-encoding=UTF-8           //默认的编码的确是UTF-8
spring.mail.properties.mail.smtp.auth=true

 
3. Obtenga el código de autorización spring.mail.password
        Haga clic en Configuración -> Cuenta -> Habilitar el servicio POP3 / SMTP y el servicio IMAP / SMTP (hay un tutorial en Internet que dice que habilite el servicio POP3 / SMTP, no me importa, todo está activado) -> Obtener código de autorización
Luego copie el código de autorización y péguelo en el proyecto.
4. Proyecto de combate real
        Después de configurar lo anterior, puede usar el correo electrónico. Inicié el correo electrónico después de restablecer la contraseña . ¡Comencemos con el controlador de back-end directamente! ¡Vaya directamente al tema, simple y grosero, directamente en el código!
/**
* @Desc  重置用户密码并发送邮件
* @Param
* @return
* @Date 2020/3/21 17:29
*/
@PostMapping("/sendMail")
@LoginRequired
public JsonData sendMail(@RequestParam(value = "toMail") String toMail,
                         @RequestParam(value = "userId") Long userId) {
    if (StringUtils.isEmpty(toMail)) {
        return JsonData.fail("用户邮箱不能为空");
    }
    //TODO 随机生成密码
    String defaultPassword = PasswordCreateUtil.createPassWord(8);
    User user = new User();
    user.setUserId(userId);
    user.setUserPassword(defaultPassword);
    int count = userService.updateUser(user);
    if (count > 0) {
        mailService.sendSimpleMail(toMail, "重置密码", "您的初始密码为:" + defaultPassword);
        return JsonData.success(count, "重置密码成功");
    } else {
        return JsonData.fail("重置密码失败");
    }
}

 
Hablemos de la lógica a grandes rasgos. Primero, después de hacer clic en el botón de restablecimiento de contraseña en la página de inicio, se activa nuestro controlador de back-end, pasa los dos parámetros de userId y restablece la cuenta de correo electrónico de la persona, y camina hasta nuestro método. Este método hace tres Cosa:
1. Regenere una contraseña. Se pueden usar números aleatorios para seleccionar abcd ... y números para regenerar una contraseña. Como se muestra en la fila: 216
2. Asigne la contraseña generada al nuevo usuario y actualice la información del usuario de la base de datos. Como se muestra en la fila: 217-220
3. Una vez que la base de datos se haya actualizado correctamente, vaya al buzón de correo de la persona que lo restableció. Como se muestra en la fila: 222-223
 
A continuación, presentaremos estos tres pasos de lógica por separado.
1. Regenere una contraseña. Las clases Aleatorias y Matemáticas se utilizan principalmente aquí .
/**
* @param len
* @return : java.lang.String
* @author: zhupeng
* @date: 2020-03-24 21:19
* @description: 指定长度生成随机密码
*/
public static String createPassWord(int len) {
    int random = createRandomInt();
    return createPassWord(random, len);
}
private static String createPassWord(int random, int len) {
    Random rd = new Random(random);
    final int maxNum = 62;
    StringBuffer sb = new StringBuffer();
    int rdGet;//取得随机数
    char[] str = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k',
            'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
            'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K',
            'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
            'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};


    int count = 0;
    while (count < len) {
        //生成的数最大为62-1
        rdGet = Math.abs(rd.nextInt(maxNum));
        if (rdGet >= 0 && rdGet < str.length) {
            sb.append(str[rdGet]);
            count++;
        }
    }
    return sb.toString();
}


private static int createRandomInt() {
    //得到0.0到1.0之间的数字,并扩大100000倍
    double temp = Math.random() * 100000;
    //如果数据等于100000,则减少1
    if (temp >= 100000) {
        temp = 99999;
    }
    int tempint = (int) Math.ceil(temp);
    return tempint;
}

2. Asigne la contraseña generada al nuevo usuario y actualice la información del usuario de la base de datos.

Aquí, en la reasignación de la contraseña, se utiliza el cifrado MD5 y la asignación de usuario adopta la sintaxis lombok. Si está interesado, puede ver el uso de lombok, que puede simplificar enormemente el código.
/**
* @Desc  更新用户
* @Param
* @return
* @Date 2020/3/21 17:39
*/
@Override
public int updateUser(User user) {
    if (checkUserNameExist(user.getUserName(), user.getUserId())) {
        throw new ParamException("用户名已被占用");
    }
    if (checkUserTrueNameExist(user.getUserTrueName(), user.getUserId())) {
        throw new ParamException("真实姓名已经存在");
    }
    if (checkUserEmailExist(user.getUserEmail(), user.getUserId())) {
        throw new ParamException("邮箱已被占用");
    }
    if (checkUserPhoneExist(user.getUserPhone(), user.getUserId())) {
        throw new ParamException("手机号已被占用");
    }
    User before = userMapper.selectByPrimaryKey(user.getUserId());
    Preconditions.checkNotNull(before, "需更新的用户不存在");
    User after = User.builder()
            .userId(user.getUserId())
            .userName(user.getUserName())
            .userTrueName(user.getUserTrueName())
            .userPassword(Md5Util.md5(user.getUserPassword(), Md5Util.SALT))
            .userEmail(user.getUserEmail())
            .userPhone(user.getUserPhone())
            .userState(user.getUserState())
            .build();
    int count = userMapper.updateByPrimaryKeySelective(after);
    return count;
}

3. Una vez que la base de datos se haya actualizado correctamente, vaya al buzón de correo de la persona que lo restableció.


@Resource
private JavaMailSender mailSender;


@Value("${spring.mail.username}")
private String from;


/**
* @Desc  发送简单邮件
* @Param
* @return
* @Date 2020/3/21 17:36
*/
@Override
public void sendSimpleMail(String to, String subject, String content) {
    SimpleMailMessage message = new SimpleMailMessage();
    message.setFrom(from);
    message.setTo(to);
    message.setSubject(subject);
    message.setText(content);
    try {
        mailSender.send(message);
        log.info("简单邮件发送成功!");
    } catch (MailException e) {
        log.error("发送简单邮件时发生异常!" + e);
    }
}

 
Necesita inyectar la clase JavaMailSender, necesita agregar esta anotación @Resource, como se muestra arriba en la fila: 25-26
Obtenga la dirección de correo electrónico del remitente. Hemos mantenido la dirección de correo electrónico en Propiedades. Debe agregar una anotación de valor, que es la clave del parámetro para obtener información. Como se muestra arriba de la fila: 28-29
Escribe un método de envío. Utilizo un método de correo electrónico simple e ingreso tres parámetros para: buzón del destinatario, asunto: asunto, que es el título del correo electrónico, contenido: contenido del correo electrónico
También es un nuevo objeto SimpleMailMessage, que asigna el remitente, el destinatario, el asunto y el contenido. Luego llame al método de envío de JavaMailSender.
Se adjunta lo siguiente al código de correo complejo: En comparación con el correo simple, el procesamiento de correo complejo puede enviar no solo el contenido del asunto, sino también archivos de imágenes, etc. Si está interesado, ¡puede probarlo usted mismo!
  //复杂邮件
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage);
        messageHelper.setFrom("[email protected]");
        messageHelper.setTo("[email protected]");
        messageHelper.setSubject("Happy New Year");
        messageHelper.setText("新年快乐!");
        messageHelper.addInline("doge.gif", new File("xx/xx/doge.gif"));
        messageHelper.addAttachment("work.docx", new File("xx/xx/work.docx"));
        mailSender.send(mimeMessage);

4. Efecto de combate real

 
 
¡Grabe, resuma, comparta! ¡El aprendizaje siempre está en camino!
 
 

Supongo que te gusta

Origin blog.csdn.net/qq_35340913/article/details/105469041
Recomendado
Clasificación