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

相关推荐
Flynn Liang6 分钟前
Spring AI 2.0 深度解析:ChatClient、Advisor 链与 MCP——Java 工程师的 AI 落地最优解
java·人工智能·spring·大模型·架构设计·spring ai
灿飞13 分钟前
Kotlin与Java虚拟机六:基础与类型系统:一切皆对象,但对象有代价
java·kotlin
静水leo17 分钟前
使用 Whistle 拦截接口并模拟后端响应
前端
计算机毕设定制辅导-无忧学长22 分钟前
《基于微信小程序健康习惯激励系统设计与实现》
java·spring boot·mysql·微信小程序·uniapp·健康习惯激励系统
揽星河..27 分钟前
【C语言】指针
c语言·开发语言
掘金者阿豪29 分钟前
SQL Server数据迁移完成后,凌晨的数据库告警该怎么查?
前端·后端
JudithHuang31 分钟前
React 嵌套路由与布局
前端·react.js·arcgis·react·react router
htzyl20642 分钟前
前端阶梯——第四十三章、实战二:待办清单To-Do
前端·javascript·html
小小数媒成员44 分钟前
UGUI原理(一)
开发语言·游戏·unity·游戏引擎