[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.最后写写修改密码的逻辑即可.

相关推荐
铁皮饭盒11 分钟前
26年bunjs, elysia+pg一把梭, redis都省了
前端·javascript·后端
plainGeekDev22 分钟前
ButterKnife → ViewBinding
android·java·kotlin
lichenyang45313 小时前
Docker 学习笔记(一):为什么需要镜像、容器和仓库?
前端
kyriewen13 小时前
别再对着 TypeScript 报错发呆了:我把 10 个最常见的红色波浪线翻译成了人话
前端·javascript·typescript
IT_陈寒13 小时前
SpringBoot自动配置的坑,我的API突然就404了
前端·人工智能·后端
奇奇怪怪的14 小时前
Embedding 模型 10+ 横向评测
前端
陈广亮14 小时前
Monorepo 从 0 到 1 实操指南 2026 版:pnpm catalogs + Turborepo 2.x + changesets 全链路
前端
子兮曰14 小时前
OpenMontage 深度解剖:你的 AI 编程助手,其实是个视频工作室
前端·后端·ai编程
敲代码的鱼14 小时前
PDF 预览与签名批注写回 支持安卓 iOS 鸿蒙 UTS插件
android·前端·ios