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

相关推荐
prince052 小时前
用户积分系统怎么设计
java·大数据·数据库
六月June June4 小时前
自定义调色盘组件
前端·javascript·调色盘
96774 小时前
理解IOC控制反转和spring容器,@Autowired的参数的作用
java·sql·spring
SY_FC4 小时前
实现一个父组件引入了子组件,跳转到其他页面,其他页面返回回来重新加载子组件函数
java·前端·javascript
糟糕好吃4 小时前
我让 AI 操作网页之后,开始不想点按钮了
前端·javascript·后端
陈天伟教授4 小时前
人工智能应用- 天文学家的助手:08. 星系定位与分类
前端·javascript·数据库·人工智能·机器学习
VaJoy5 小时前
给到夯!前端工具链新标杆 Vite Plus 初探
前端·vite
啵啵鱼爱吃小猫咪5 小时前
机械臂阻抗控制github项目-mujoco仿真
开发语言·人工智能·python·机器人
似水明俊德5 小时前
02-C#
开发语言·c#
耀耀_很无聊5 小时前
09_Jenkins安装JDK环境
java·运维·jenkins