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

相关推荐
陈随易1 小时前
真的,你可以不用TypeScript
前端·后端·程序员
郑州光合科技余经理1 小时前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1232 小时前
matlab画图工具
开发语言·matlab
唐璜Taro2 小时前
Vue3 + TypeScript 后台管理系统完整方案
前端·javascript·typescript
大大水瓶2 小时前
Tomcat
java·tomcat
dustcell.2 小时前
haproxy七层代理
java·开发语言·前端
norlan_jame2 小时前
C-PHY与D-PHY差异
c语言·开发语言
游离态指针2 小时前
以为发消息=下单成功?RabbitMQ从0到秒杀实战的完整踩坑笔记
java
李慕婉学姐2 小时前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
掘金酱2 小时前
「寻找年味」 沸点活动|获奖名单公示🎊
前端·人工智能·后端