首页 > 其他分享 >4.26

4.26

时间:2024-04-26 23:11:54浏览次数:26  
标签:org springframework append 邮箱 import email 4.26

小组项目配置邮箱验证码修改登录密码

springboot yml 配置

```

spring:
mail:
# 邮件服务器地址
host: smtp.qq.com
# 协议 默认就是smtp
protocol: smtp
# 编码格式 默认就是utf-8
default-encoding: utf-8
# 邮箱
username: [email protected]
# 16位授权码 不是邮箱密码
password: pqgoestdltxgdgfb
# smtp的指定端口 使用465要将protocol改为smtps
port: 587
# 设置开启ssl
properties:
mail:
stmp:
ssl:
enable: false

```
controller 层

```

import com.example.pojo.Result;
import com.example.service.IMailService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Api(tags = "邮箱业务管理")
@RestController
@RequestMapping("/mail")
public class MailController {

@Autowired
private IMailService mailService;

/**
* 获取重置密码的验证码
*/
@ApiOperation(value = "获取重置密码的验证码", notes = "获取重置密码的验证码", httpMethod = "GET")
@ApiImplicitParams({
@ApiImplicitParam(name = "username", value = "(账号)", required = true, paramType = "form"),
@ApiImplicitParam(name = "email", value = "邮箱地址", required = true, paramType = "form"),
})
@GetMapping("/getCode")
public Result getCode(String username, String email){
return mailService.getCode(username,email);
}
}

```

serviceImpl

```

import com.example.mapper.UserMapper;
import com.example.pojo.Result;
import com.example.service.IMailService;
import jakarta.mail.MessagingException;
import jakarta.mail.internet.MimeMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;

import java.util.Random;
import java.util.concurrent.TimeUnit;

@Service
public class IMailServiceImpl implements IMailService {
@Autowired
private UserMapper userMapper;

@Autowired
private StringRedisTemplate stringRedisTemplate;

@Autowired
private JavaMailSender mailSender;

@Value("${spring.mail.username}")
private String mailUserName;

@Override
public Result getCode(String username, String email) {
// 非空校验
if (null == username || "".equals(username)) return Result.error("账号不能为空!");
if (null == email || "".equals(email)) return Result.error("邮箱不能为空!");

// System.out.println(staffNumber);
// System.out.println(mailAddress);
// 账号存在校验
String email_user = userMapper.getEmailByUsername(username);
// System.out.println(email);
if (email_user == null) return Result.error("邮箱不存在!");
if (!email_user.equals(email)) return Result.error("邮箱不匹配!");


ValueOperations<String, String> operations = stringRedisTemplate.opsForValue();
String verifyCode = operations.get("verify");
// 使用当前时间作为种子值
long seed = System.currentTimeMillis();
Random random = new Random(seed);
// if (verifyCode == null) {
verifyCode = String.valueOf(random.nextInt(899999) + 100000);//生成短信验证码
// }
// 验证码存入redis并设置过期时间
operations.set("verify", verifyCode, 5, TimeUnit.MINUTES);

// 编写邮箱内容
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("<html><head><title></title></head><body>");
stringBuilder.append("您好<br/>");
stringBuilder.append("您的验证码是:").append(verifyCode).append("<br/>");
stringBuilder.append("您可以复制此验证码并返回至共享益找回密码页面,以验证您的邮箱。<br/>");
stringBuilder.append("此验证码只能使用一次,在");
// stringBuilder.append(overtime.toString());
stringBuilder.append("5分钟内有效。验证成功则自动失效。<br/>");
stringBuilder.append("如果您没有进行上述操作,请忽略此邮件。");
MimeMessage mimeMessage = mailSender.createMimeMessage();

// 发件配置并发送邮件
try {
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
//这里只是设置username 并没有设置host和password,因为host和password在springboot启动创建JavaMailSender实例的时候已经读取了
mimeMessageHelper.setFrom(mailUserName);
// 用户的邮箱地址
mimeMessageHelper.setTo(email);
// 邮件的标题
mimeMessage.setSubject("邮箱验证-共享益");
// 上面所拼接的邮件内容
mimeMessageHelper.setText(stringBuilder.toString(), true);
mailSender.send(mimeMessage);
} catch (MessagingException e) {
e.printStackTrace();
}
return Result.success("获取验证码成功,请查看移步您的邮箱" + email + "查看验证码!");
}
}

```

pom依赖

```

        <!--邮箱验证依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>jakarta.platform</groupId>
<artifactId>jakarta.jakartaee-api</artifactId>
<version>10.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.0.18</version>
</dependency>

```

需要在qq邮箱中开通

 

标签:org,springframework,append,邮箱,import,email,4.26
From: https://www.cnblogs.com/258-333/p/18161056

相关文章

  • 关于SAP-APP机器-R3trans -d报错-R3trans: /lib64/libstdc++.so.6: version `GLIBCXX_
    在SAP-应用-APP-机器上执行如下命令报错awpxxx03:prdadm270>R3trans-dR3trans:/lib64/libstdc++.so.6:version`GLIBCXX_3.4.26'notfound(requiredbyR3trans) 其实之前,使用过一种方法解决这个问题,可以参考笔者另一篇文章《关于Redhat-Linux中-compat-sap-c++的说......
  • ue4.26 CurveLinearColorAtlas支持非正方形尺寸
    默认CurveAtlas只能是正方形 改代码可以让它支持非正方形: 改法如下:CurveLinearColorAtlas.h//CopyrightEpicGames,Inc.AllRightsReserved.#pragmaonce#include"CoreMinimal.h"#include"UObject/ObjectMacros.h"#include"UObject/Object.h"#in......
  • ue4.26 forward translucency shadow
    对于前向透明材质:想找到其阴影代码。首先由于是前向透明物体,所以肯定不是像不透明物体那样有screenspaceshadowmask图,而是在shader中计算前向光照时顺便计算阴影。所以只需找到相应shader文件。为此用renderDoc截帧,但默认截帧只显示pass名,而不显示shader名,为了显示s......
  • ue4.26学习笔记1-角色移动
    ue4.26学习笔记1-角色移动角色旋转首先创建character蓝图类打开创建的蓝图类,为骨骼网格体添加模型,此处使用小白人的模型,然后添加弹簧臂组件和摄像机组件在项目设置->输入中添加鼠标x轴和y轴的操作映射,此处x轴操作映射命名为鼠标左右移动,y轴操作映射命名为鼠标上下移动,其中x......
  • /lib64/libstdc++.so.6: version `GLIBCXX_3.4.26' not found
    原因使用的gcc没有找到对应的glib库。每个版本的glib都会有改变,所以使用的时候必须匹配。大部分是因为自己编译升级了gcc,再用新的gcc编译程序时没有找到当时匹配的类库。查找原因报错提示很明确了,/lib64/libstdc++.so.6中没有找到GLIBCXX_3.4.26版本内容。正常情况/lib64/lib......
  • 2023.4.26周三每日总结
    Activity的生命周期Activity生命周期是一个非常重要的概念,理解Activity的生命周期对于开发Android应用程序至关重要。在AS中,Activity有始有终,可以选择对应状态的回调函数,根据状态完成一些逻辑操作。学习Activity的生命周期,可以更好的掌握应用程序的启动、销毁、状态保存等操作......
  • 2023.4.26《人月神话》读后感
    1.编程系统产品开发的工作量是供个人使用的、独立开发的构件程序的九倍。2. 编程行业的一些内在固有苦恼:● 将做事方式调整到追求完美,是学习编程的最困难部分。● 由其他人来设定目标,并且必须依靠自己无法控制的事物。● 真正的权威来自于每次任务的完成。● 任何创造性......
  • 4.26
    问题描述:一辆卡车违反交通规则,撞人后逃跑。现场有三人目击该事件,但都没有记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是数学家,他说:四位的车号刚好是一个整数的平方。请根据以上线索求出车号。流程图:代码示例:#i......
  • 4.26打卡
     #include<bits/stdc++.h>usingnamespacestd;classnumber{intfz,fm;friendnumberoperator+(number&n1,number&n2);public:number(inta=0,intb=1){fz=a;fm=b;}friendintgcd(inta,intb......
  • 2023.4.26三天学习总结
    一.三天任务完成情况1.完成了tarjan求强连通分量以及在缩点后的DAG上dp的复习2.完成了tarjan求点双和边双以及在缩点后数方案数的复习3.简单制定了一下接下来一年的学习计划4.完成了div3的补题二.截图 三.题解CodeforcesRound867(Div.3)......