# 邮箱发送验证码 **Repository Path**: tzmoxi/use-email-getcode ## Basic Information - **Project Name**: 邮箱发送验证码 - **Description**: 基于SpringBoot+Hutools+邮箱实现验证码发送,附带详细教程 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2023-09-21 - **Last Updated**: 2023-10-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: SpringBoot, hutools, 邮箱 ## README # 1.项目介绍 基于SpringBoot + QQ邮箱服务 + Hutools实现的获取验证码功能,接下来从如何申请授权码,如何配置项目,如何启动项目,如何测试项目进行讲解,下面的图片是一个测试案例,使用postman进行测试,在测试上填写发送人的邮箱,即可收到验证码邮箱 ![img](https://imags-1259764475.cos.ap-nanjing.myqcloud.com/img/202309252347213.png) # 2.使用前提 1.从仓库拉取代码 2.需要申请邮箱的授权码,然后在application.yml下进行配置 # 3.邮箱授权码申请 ## 1.开启POP3/SMTP服务 ![image-20230925173427366](https://imags-1259764475.cos.ap-nanjing.myqcloud.com/img/202309252347214.png) 点击设置,进入下面的页面,然后再点击账号 ![image-20230925173455186](https://imags-1259764475.cos.ap-nanjing.myqcloud.com/img/202309252347215.png) 往下滑,找到下面的服务,点击申请授权码,按照提示一步步完成 ![image-20230925173604188](https://imags-1259764475.cos.ap-nanjing.myqcloud.com/img/202309252347216.png) ## 2.复制授权码 ![image-20230925173914347](https://imags-1259764475.cos.ap-nanjing.myqcloud.com/img/202309252347217.png) # 4.项目使用说明 > 1.可以自己手写代码,也可以从我的仓库直接拉取代码 > > 2.配置application配置文件,修改username改为自己的邮箱,password改为邮箱授权码,详细介绍查看代码说明下的配置文件 > > 3.启动项目SendemailcodeApplication > > 4.使用postman进行测试 1.拉取仓库代码: ``` git clone https://gitee.com/tzmoxi/use-email-getcode.git ``` 2.修改配置文件 修改application.yml下的配置文件,修改成为自己的邮箱和授权码 ![image-20230925232720765](https://imags-1259764475.cos.ap-nanjing.myqcloud.com/img/202309252347218.png) 3.修改完成上面的内容,就直接启动项目 ![image-20230925232831791](https://imags-1259764475.cos.ap-nanjing.myqcloud.com/img/202309252347219.png) 4.使用postman测试 首先是get请求,填写请求地址localhost:8080/user/getCode,传递的参数为tos值为接收方邮箱,点击发送即可收到 ![image-20230925233457586](https://imags-1259764475.cos.ap-nanjing.myqcloud.com/img/202309252347220.png) 点击发送,成功后,邮箱会收到一个验证码 ![image-20230925233647622](https://imags-1259764475.cos.ap-nanjing.myqcloud.com/img/202309252347221.png) # 5.代码说明 ## 1.创建一个SpringBoot工程 ## 2.引入邮件相关依赖 注意:==springboot相关的依赖给去掉了,在创建工程的时候会自动引入== ```xml org.projectlombok lombok 1.18.24 provided cn.hutool hutool-all 5.8.16 org.springframework.boot spring-boot-starter-mail org.apache.commons commons-lang3 3.12.0 com.mysql mysql-connector-j runtime ``` ## 3.配置application.yml文件 username和password需要使用自己的 username事自己的qq邮箱 password是刚昂申请的邮箱授权码 ```yaml Spring: # 邮箱基本配置 mail: host: smtp.qq.com # 填写自己的邮箱 username: 111111111111@qq.com # 在邮箱内填写自己申请的授权码 password: aaaaaaaaaaaa # 端口号 port: 587 # 默认的邮件编码为UTF-8 default-encoding: UTF-8 # 其他参数 properties: mail: # 配置SSL 加密工厂 smtp: ssl: # 本地测试, 先放开ssl enable: false required: false #开启debug模式,这样邮件发送过程的日志会在控制台打印出来,方便排查错误 debug: false server: port: 8080 ``` ## 4.定义实体类 ```java @Data @AllArgsConstructor public class ToEmail implements Serializable { //邮件接受方 private String tos; //邮件主题 private String subject; //邮件内容 private String content; } ``` ## 5.邮件服务也是核心 ```java public class MailService { /** * 注入邮件工具类 */ @Resource private JavaMailSenderImpl javaMailSender; @Value("${spring.mail.username}") private String sendMailer; /** * 检测邮件信息类 * @param receiveEmail 接收者 * @param subject 主题 * @param emailMsg 内容 */ private void checkMail(String receiveEmail, String subject, String emailMsg){ // StringUtils 需要引入 commons-lang3 依赖 // 可以用 receiveEmail == null || receiveEmail.isEmpty() 来代替 if(StringUtils.isEmpty(receiveEmail)) { throw new RuntimeException("邮件收件人不能为空"); } if(StringUtils.isEmpty(subject)) { throw new RuntimeException("邮件主题不能为空"); } if(StringUtils.isEmpty(emailMsg)) { throw new RuntimeException("邮件内容不能为空"); } } /** * 发送纯文本邮件 * @param receiveEmail 接收者 * @param subject 主题 * @param emailMsg 内容 */ public Boolean sendTextMail(String receiveEmail, String subject, String emailMsg) { // 参数检查 checkMail(receiveEmail, subject, emailMsg); try { // true 代表支持复杂的类型 MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(javaMailSender.createMimeMessage(), true); // 邮件发件人 mimeMessageHelper.setFrom(sendMailer); // 邮件收件人 mimeMessageHelper.setTo(receiveEmail.split(",")); // 邮件主题 mimeMessageHelper.setSubject(subject); // 邮件内容 mimeMessageHelper.setText(emailMsg); // 邮件发送时间 mimeMessageHelper.setSentDate(new Date()); // 发送邮件 javaMailSender.send(mimeMessageHelper.getMimeMessage()); System.out.println("发送邮件成功: " + sendMailer + "-->" + receiveEmail); return true; } catch (MessagingException e) { e.printStackTrace(); System.out.println("发送邮件失败: " + e.getMessage()); return false; } } } ``` ## 6.编写控制层 ```java @RestController @RequestMapping("/user") public class EmailController { @Resource private MailService mailService; @RequestMapping("/getCode") public R sendEmail(ToEmail toEmail, HttpServletRequest request) { if(toEmail == null || toEmail.getTos() == null ) { return R.error( "参数错误!"); } toEmail.setSubject("你本次的验证码是"); // 使用hutools工具获取验证码 CircleCaptcha captcha = CaptchaUtil.createCircleCaptcha(200, 100, 4, 20); String verCode = captcha.getCode(); String content = "尊敬的xxx,您好:\n" + "\n本次请求的邮件验证码为:" + verCode + ",本验证码 5 分钟内效,请及时输入。(请勿泄露此验证码)\n" + "\n如非本人操作,请忽略该邮件。\n(这是一封通过自动发送的邮件,请不要直接回复)"; toEmail.setContent(content); Boolean check = mailService.sendTextMail(toEmail.getTos(), toEmail.getSubject(), toEmail.getContent()); if(check) { return R.success("发送成功"); } else { return R.error( "发送失败"); } } } ``` # 6.csdn详细笔记地址 [SpringBoot整合QQ邮箱发送验证码](https://blog.csdn.net/qq_52699757/article/details/133284366)