[Java]实现使用邮箱找回密码的功能

1.添加Maven依赖:

XML 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

2.配置文件中进行mail配置:

XML 复制代码
spring:
  mail:
    host: smtp.163.com
    username: XXXXXXXXXXXX@163.com
    #授权码  需要username账号开启POP3/IMAP/SMTP/Exchange/CardDAV 服务
    password: XXXXXXXXXXX
    default-encoding: UTF-8
    properties:
      mail:
        smtp:
          ssl:
            enable: true
            auth: true

3.MailUtil类(当成固定写法就可以)

java 复制代码
@Component
public class MailUtil {
    @Autowired
    private JavaMailSender javaMailSender;

    //获取application.properties中的属性值
    @Value("${spring.mail.username}")
    private String fromMail;

    public void SendHtmlMail(String subject,String content,String toMail) throws MessagingException {
        MimeMessage msg=javaMailSender.createMimeMessage();
        MimeMessageHelper helper=
                new MimeMessageHelper(msg,true,"UTF-8");
        helper.setFrom(fromMail);
        helper.setTo(toMail);
        helper.setSubject(subject);
        //可以识别html标签  True
        helper.setText(content,true);
        javaMailSender.send(msg);
    }
}

4.编写控制器,服务,Mapper接口,实现Mapper映射

服务层的sendMail()代码:

java 复制代码
public int sendEmail(Map<String,String> param){
        int row=0;
        //从Mapper层返回的Map对象会被自动装成List类型的数据
        List<Map<String,Object>> list =adminMapper.findByEmail(param);
        if(list!=null&& !list.isEmpty()){
            //文件的标题
            String subject="密码找回";
            //要发送给谁的邮件地址
            String toMail=param.get("adminEmail");
            //邮件的内容
            String content="请点击以下链接完成密码的重置"+
                    "<a href='http://localhost:5173/resetPwd?adminEmail="
                    +toMail+"'>\uD83E\uDD88\uD83E\uDD88\uD83D\uDC2F\uD83D\uDC2F</a>";
            try {
                //发送邮件
                mailUtil.SendHtmlMail(subject,content,toMail);
                row=1;
            } catch (MessagingException e) {
                row=2;
            }
        }
        return row;
    }

5.编写Mapper层映射

resultType指定返回值的类型是一行数据,封装成了Map对象,key为数据库中的列,value为数据库中的值

parameterType表示参数的类型是map

#{adminEmail}表示从参数map中的key取出的值

XML 复制代码
<select id="findByEmail" resultType="java.util.Map" parameterType="map">
        select * from tbl_admin_info
        where adminEmail=#{adminEmail}
    </select>

现在,可以从前端发送请求了,发送之后,会先到AdminController层,然后调用Service层方法,然后到了Mapper数据访问层,程序去搜索数据库,返回List列表,继续返回row,到达前端后进行判断:

TypeScript 复制代码
function findPwd(){
    axios.post("/api/admin/sendMail",admin)
    .then(rst=>{
        if(rst.data==1){
            ElMessage.success("去邮箱吧")
        }
        else{
            ElMessage.error("修改失败");
        }
    }).catch(err=>{
        console.log(err);
    })
}

之后来到邮箱:

6.最后写写修改密码的逻辑即可.

相关推荐
码云数智-园园几秒前
类似小鹅通的知识付费小程序平台有哪些
开发语言
snow@li8 分钟前
Java:跨平台原理与JDK、JRE、JVM全景深度解析
java·开发语言·jvm
乘风gg11 分钟前
9 张 AI 生成的图,吃透任何一个前端项目
前端·ai编程·claude
覆东流12 分钟前
2.Java程序基础
java·开发语言·后端
snow@li18 分钟前
SpringBoot:全套生命周期全景详解/应用级+Bean级
java·spring boot·rpc
ttwuai20 分钟前
Go 后台定时任务启停不生效怎么办?先查调度同步链路
开发语言·后端·golang
moonsims20 分钟前
低空量子无人机
前端·数据结构
love_muming30 分钟前
二叉树操作全解析:从递归到层序遍历
java·数据结构·算法·二叉树
小的~~31 分钟前
ThreadLocal 、InheritableThreadLocal 与 TransmittableThreadLocal 的进阶指南
java·开发语言
键盘会跳舞38 分钟前
C++:std::pair 源码级深度剖析 —— 关联容器的基石
开发语言·c++·pair·关联容器