广告
返回顶部
首页 > 资讯 > 后端开发 > Python >SpringBoot发送html邮箱验证码功能
  • 477
分享到

SpringBoot发送html邮箱验证码功能

2024-04-02 19:04:59 477人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

1. 效果展示(用户收到的) 2. 邮件推送管理(见以后的博客) 先看看如果管理员手动发送该如何操作 3. 后端核心代码(通用版) 3.1 SendEmailVO实体类

1. 效果展示(用户收到的)

2. 邮件推送管理(见以后的博客)

先看看如果管理员手动发送该如何操作


3. 后端核心代码(通用版)

3.1 SendEmailVO实体类


package com.example.han.model.VO;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Map;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Schema(description = "发送邮件VO实体类")
public class SendEmailVO {
    @Schema(description = "收件人邮箱")
    String toAddress;
    @Schema(description = "模板名")
    String modelName;
    @Schema(description = "邮件标题")
    String title;
    @Schema(description = "文本里所需要参数")
    Map<String,String> parameters;
    @Schema(description = "调用者类型(管理员/服务)")
    String manageType;
    @Schema(description = "(调用者/服务)名称")
    String manager;
}

3.2 Controller层核心代码


   @Operation(summary = "发送html邮件")
   @PutMapping("/sendemail")
   public ResultReturn sendEmail(@RequestBody SendEmailVO sendEmailVO){
       return (sendModelService.sendEmailByParam(sendEmailVO));
   }

3.3 ServiceImpl层核心代码


    @Autowired
    HtmlEmailServiceImpl htmlEmailService;
    
    
    public String getTextByName(String name){
        List<MailModelDO> lists = mailRepository.getAllMailModel();
        for (MailModelDO list : lists){
            if(list.getModelName().equals(name)){
                return list.getHtmlText();
            }
        }
        return "NOT FOUND";
    }
    
    public ResultReturn sendEmailByParam(SendEmailVO sendEmailVO){
        String str = getTextByName(sendEmailVO.getModelName());
        if(!CheckMail.checkMail(sendEmailVO.getToAddress())){
            return ResultReturnUtil.fail(WRONG_EMAIL_ADDRESS);
        }
        if(sendEmailVO.getTitle().equals("")){
            return ResultReturnUtil.fail(EMPTY_TITLE);
        }
        if(str.equals("NOT FOUND")){
            return ResultReturnUtil.fail(FIND_MODEL_FAILED);
        }
        ReplaceWordUtil replaceWordUtil = new ReplaceWordUtil();
        String content = replaceWordUtil.replaceWord(str,sendEmailVO.getParameters());

        MailInfoTO info = new MailInfoTO();
        info.setToAddress(sendEmailVO.getToAddress());
        info.setSubject(sendEmailVO.getTitle());
        info.setContent(content);
        try {
            htmlEmailService.sendHtmlMail(info);
        } catch (Exception e) {
            //System.out.print("'"+sendEmailVO.getTitle()+"'的邮件发送失败!");
            e.printStackTrace();
        }
        MailHistoryDO mailHistoryDO = ToBeMailHistoryDO(sendEmailVO);
        mailRepository.saveHistory(mailHistoryDO);
        return ResultReturnUtil.success(SEND_EMAIL_SUCCESS,sendEmailVO.getToAddress());
    }

3.4 利用正则检查邮箱是否合法工具


package com.example.han.util;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CheckMail {
    public static boolean checkMail(String mail){
        Pattern pattern=Pattern.compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");
        //\w+@(\w+.)+[a-z]{2,3}
        Matcher matcher=pattern.matcher(mail);
        return matcher.matches();
    }
}

3.5 字符替换工具类

就是为了将模板中的花括号替换成真正需要的东西


package com.example.han.util;

import java.util.Iterator;
import java.util.Map;


public class ReplaceWordUtil {
    public String replaceWord(String str, Map<String,String> map) {
        Iterator iter = map.entrySet().iterator();
        while (iter.hasNext()) {
            Map.Entry entry = (Map.Entry) iter.next();
            Object key = entry.geTKEy();
            Object value = entry.getValue();
            str = str.replace("{{"+key+"}}",value+"");
            //System.out.println(key+":"+value);
        }
        //System.out.println(str);
        return str;
    }
}

3.6 Reposity层 逻辑并不是很好,是找出来所有模版以后,开始遍历出来想要的那一个


package com.example.han.repository;

import com.example.han.model.DO.MailHistoryDO;
import com.example.han.model.DO.MailModelDO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongoDB.core.MonGoTemplate;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public class MailRepository {
    @Autowired
    MongoTemplate mongoTemplate;

    public List<MailModelDO> getAllMailModel(){
        System.out.println(mongoTemplate.findAll(MailModelDO.class));
        return mongoTemplate.findAll(MailModelDO.class);
    }
}

3.7 发送html邮件的核心配置类


package com.example.han.service.impl;

import com.example.han.model.TO.MailInfoTO;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Date;
import java.util.Properties;


@Service
public class HtmlEmailServiceImpl{
    @Value("${spring.mail.host}")
    private String host;

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

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

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

    
    public void sendHtmlMail(MailInfoTO info) throws Exception {
        System.out.println(host);
        System.out.println(formName);
        info.setHost(host);
        info.setFormName(formName);
        info.setFormPassword(password);   //网易邮箱的授权码~不一定是密码
        info.setReplayAddress(replayAddress);
        System.out.println(info.getHost());
        System.out.println(info.getContent());

        Message message = getMessage(info);
        // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
        Multipart mainPart = new MimeMultipart();
        // 创建一个包含HTML内容的MimeBodyPart
        BodyPart html = new MimeBodyPart();
        // 设置HTML内容
        html.setContent(info.getContent(), "text/html; charset=utf-8");
        mainPart.addBodyPart(html);
        // 将MiniMultipart对象设置为邮件内容
        message.setContent(mainPart);
        Transport.send(message);
    }

    public Message getMessage(MailInfoTO info) throws Exception{
        final Properties p = System.getProperties() ;
        p.setProperty("mail.smtp.host", info.getHost());
        p.setProperty("mail.smtp.auth", "true");
        p.setProperty("mail.smtp.user", info.getFormName());
        p.setProperty("mail.smtp.pass", info.getFormPassword());

        // 根据邮件会话属性和密码验证器构造一个发送邮件的session
        Session session = Session.getInstance(p, new Authenticator(){
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(p.getProperty("mail.smtp.user"),p.getProperty("mail.smtp.pass"));
            }
        });
        session.setDebug(true);
        Message message = new MimeMessage(session);
        //消息发送的主题
        message.setSubject(info.getSubject());
        //接受消息的人
        message.setReplyTo(InternetAddress.parse(info.getReplayAddress()));
        //消息的发送者
        message.setFrom(new InternetAddress(p.getProperty("mail.smtp.user"),"这是我的名字"));
        // 创建邮件的接收者地址,并设置到邮件消息中
        message.setRecipient(Message.RecipientType.TO,new InternetAddress(info.getToAddress()));
        // 消息发送的时间
        message.setSentDate(new Date());
        return message ;
    }
}

4. 后端代码(带例子版)

4.1 Controller层


    @Operation(summary = "设置并发送忘记密码的验证码")
    @PostMapping("/sendForgetPasswordCode")
    public ResultReturn sendForgetPasswordCode(String email) throws MyException {
        return userService.sendForgetCode(email);
    }

4.2 ServiceImpl层

  • 这里我都配置到系统里去了,每次就不用管理员手动发送,只要用户发个请求,系统就能自动生成并发送验证码。
  • 里面的工具类还有一些方法,可以查阅上面通用版里面的代码,这里我就不赘述了。

    @Override
    public ResultReturn sendForgetCode(String email) throws MyException {
        if(!CheckMail.checkMail(email)){
            throw new MyException(400,WRONG_EMAIL_ADDRESS);
        }
        String num = ""+RandomUtil.Code();
        RedisUtil.setRedisKey("forgetCode", num, 60*5);    //先存入redis
        SendEmailVO sendEmailVO = new SendEmailVO();
        sendEmailVO.setManageType("System");
        sendEmailVO.setManager("ForgetPasswordSystem");
        sendEmailVO.setModelName("forgetCode");     //需要用的模版名字
        Map map = new HashMap<String,String>();
        map.put("code",num);
        sendEmailVO.setParameters(map);
        sendEmailVO.setTitle("诗云-忘记密码-验证码");
        sendEmailVO.setToAddress(email);
        sendEmailService.sendEmailByParam(sendEmailVO);
        return ResultReturnUtil.success(SEND_VERIFICATION_CODE_SUCCESS,email);
    }

5. html邮件内容

5.1 注册验证码模板

https://www.jb51.net/article/180220.htm

到此这篇关于SpringBoot发送html邮箱验证码的文章就介绍到这了,更多相关SpringBoot发送邮箱验证码内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: SpringBoot发送html邮箱验证码功能

本文链接: https://www.lsjlt.com/news/160158.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringBoot发送html邮箱验证码功能
    1. 效果展示(用户收到的) 2. 邮件推送管理(见以后的博客) 先看看如果管理员手动发送该如何操作 3. 后端核心代码(通用版) 3.1 SendEmailVO实体类 ...
    99+
    2022-11-12
  • nodejs实现发送邮箱验证码功能
    本文实例为大家分享了nodejs实现发送邮箱验证码的具体代码,供大家参考,具体内容如下 今天做了个小demo,是用nodejs实现注册时(当然在别的地方也是可以用的)的邮箱验证功能,...
    99+
    2022-11-13
  • 【SpringBoot】| 邮箱发送验证码,你会了吗?
    目录 🦁 题外话🦁 提前准备2.1 配置邮箱第三方登录2.1.1 点击设置——账户2.1.2 开启POP3/SMTP服务 2.2 添加依赖2.3 yaml配置 🦁 进入主题&...
    99+
    2023-08-17
    spring boot java 后端
  • nodejs怎么实现发送邮箱验证码功能
    这篇文章主要讲解了“nodejs怎么实现发送邮箱验证码功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“nodejs怎么实现发送邮箱验证码功能”吧!1、使用模块:nodemailer安装:n...
    99+
    2023-06-30
  • java实现发送邮箱验证码
    本文实例为大家分享了java实现发送邮箱验证码的具体代码,供大家参考,具体内容如下 添加依赖 <!-- 邮箱验证码 https://mvnrepository.com/ar...
    99+
    2022-11-12
  • 使用SpringBoot发送邮箱验证码的简单实现
    目录题外话提前准备2.1 配置邮箱第三方登录2.1.1 点击设置——账户2.1.2 开启POP3/SMTP服务2.2 添加依赖2.3 yaml配置进入主题测试...
    99+
    2023-05-18
    SpringBoot 验证码 SpringBoot 邮箱发送
  • springboot整合redis实现发送邮箱并验证
    目录1.起步2.工具类邮箱工具类redis乱码解决3.controller搭建4.前端搭建结果总结1.起步 pom文件 <!--集成redis--> ...
    99+
    2022-11-12
  • springboot整合mail实现邮箱的发送功能
    第一步添加mail的依赖 <!--引入mail的依赖 --> <dependency> <groupId>org.springfr...
    99+
    2022-11-12
  • django注册用邮箱发送验证码的实现
    视图代码 lis = []#设置一个空列表用来存放发送的验证码,用来验证 def yzm1(): res1 = "" for i in range(4):#用四...
    99+
    2022-11-12
  • JavaMailSender实现邮箱验证功能
    本文通过JavaMailSender实现邮箱注册验证中遇到的问题开始着手,给大家详细分析了其原理以及问题的解决办法。使用邮箱注册验证,我们需要理清设计思路:问题一:注册信息提交后需要对填写的邮箱号发送邮件问题二:邮件到达时用户如何进行激活,...
    99+
    2023-05-30
    javamailsender 邮箱验证 ava
  • vue中如何实现手机号和邮箱正则验证以及60s发送验证码功能
    这篇文章将为大家详细讲解有关vue中如何实现手机号和邮箱正则验证以及60s发送验证码功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。写一个简单的验证,本来前面用的组件,...
    99+
    2022-10-19
  • 如何利用node实现发送QQ邮箱验证码
    目录开通QQ邮箱POP3/SMTP服务获取qq邮箱授权码搭建node接口服务开始安装插件开始编写index.js文件程序声明并定于发送邮件函数编写connect、body-parse...
    99+
    2022-11-13
  • 怎么利用node实现发送QQ邮箱验证码
    这篇文章主要介绍“怎么利用node实现发送QQ邮箱验证码”,在日常操作中,相信很多人在怎么利用node实现发送QQ邮箱验证码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么利用node实现发送QQ邮箱验证码...
    99+
    2023-06-30
  • 如何使用springboot整合redis实现发送邮箱并验证
    这篇文章主要为大家展示了“如何使用springboot整合redis实现发送邮箱并验证”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用springboot整合redis实现发送邮箱并验证”...
    99+
    2023-06-22
  • 使用django怎么实现发送验证码注册邮箱
    这篇文章将为大家详细讲解有关使用django怎么实现发送验证码注册邮箱,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。视图代码lis = []#设置一个空列表用来存放发送的...
    99+
    2023-06-14
  • springboot发送邮件功能的实现代码
           发邮件是一个很常见的功能,在java中实现需要依靠JavaMailSender这个接口。在spri...
    99+
    2022-11-12
  • springboot整合邮件发送功能
     pom依赖 <dependency> <groupId>org.springframework.boot</groupId...
    99+
    2022-11-12
  • SpringBoot整合Mail发送邮件功能
    目录前言Maven依赖使用QQ邮箱演示发送普通邮件验证码案例前言 我们在网站上注册账号的时候一般需要获取验证码,而这个验证码一般发送在你的手机号上还有的是发送在你的邮箱中,注册,账号...
    99+
    2022-11-12
  • Springboot实现邮箱验证码注册与修改密码及登录功能详解流程
    目录前言一、SpringBoot依赖1、pom.xml文件2、Applications.yaml二、数据库文件三、实现注册功能四、找回密码功能五、登录功能总结前言 最近Springb...
    99+
    2022-11-16
    Springboot邮箱验证码 Springboot修改密码 Springboot登陆功能
  • Redis模仿发送手机验证码功能
    流程图 一:添加jedis依赖包 二:测试连接Redis服务是否成功 // 创建Jedis对象用于连接Redis服务(在服务器上通过redis-server需要指定配置文件:...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作