当前位置:   article > 正文

一篇文章带你学会springboot中发送邮箱验证码和手机验证码_springboot使用cn.hutool.extra.mail实现邮箱发送

springboot使用cn.hutool.extra.mail实现邮箱发送

一、需求

开发项目中很多场景需要使用邮箱发送验证码 和手机发送验证码功能。

阿里云邮箱注册地址:https://market.aliyun.com/products/57002003/cmapi00037170.html?spm=5176.2020520132.101.2.330c7218KMwlX4#sku=yuncode3117000002

阿里云手机短信购买地址: https://market.aliyun.com/products/57002003/cmapi00037170.html?spm=5176.2020520132.101.2.330c7218KMwlX4#sku=yuncode3117000002

二、代码功能

(0) 引入pom.xml依赖

  1. <dependency>
  2. <groupId>cn.hutool</groupId>
  3. <artifactId>hutool-all</artifactId>
  4. <version>5.8.16</version>
  5. </dependency>
  6. <!--使用邮箱服务 -->
  7. <dependency>
  8. <groupId>com.sun.mail</groupId>
  9. <artifactId>javax.mail</artifactId>
  10. <version>1.6.2</version>
  11. </dependency>

(1)UserController

  1. package com.beiyou.controller;
  2. import com.beiyou.service.UserService;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.web.bind.annotation.GetMapping;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.RestController;
  7. @RestController
  8. @RequestMapping("/api/user")
  9. public class UserController {
  10. @Autowired
  11. private UserService userService;
  12. /** 发送邮箱验证码 */
  13. @GetMapping("/send/code")
  14. public Integer sendCode(String email) {
  15. return userService.sendCode(email);
  16. }
  17. /**发送手机验证码 */
  18. @GetMapping("/send/tel/code")
  19. public Integer sendTelCode(String tel){
  20. return userService.sendTelCode(tel);
  21. }
  22. }

(2) UserService

  1. package com.beiyou.service;
  2. import cn.hutool.core.util.RandomUtil;
  3. import cn.hutool.extra.mail.MailAccount;
  4. import cn.hutool.extra.mail.MailUtil;
  5. import cn.hutool.http.HttpRequest;
  6. import cn.hutool.json.JSONObject;
  7. import cn.hutool.json.JSONUtil;
  8. import cn.smart.core.exception.BizException;
  9. import com.beiyou.dao.UserDao;
  10. import lombok.extern.slf4j.Slf4j;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.stereotype.Service;
  13. import java.util.HashMap;
  14. @Service
  15. @Slf4j
  16. public class UserService {
  17. @Autowired
  18. private UserDao userDao;
  19. /**
  20. * 目前暂时将发送的邮箱和验证码存到map中 真正做项目是存到redis里
  21. */
  22. private static HashMap<String,Integer> emailMap=new HashMap();
  23. /**
  24. * 发送邮箱验证码
  25. */
  26. public Integer sendCode(String email) {
  27. /**定义四位随机数 */
  28. int code = RandomUtil.randomInt(1000, 10000);
  29. /**这个对象记录了邮箱服务器的记录的信息 */
  30. MailAccount mailAccount = new MailAccount();
  31. /** smtp 表示协议 aliyun 表示邮箱类型,可以换成qq等 */
  32. mailAccount.setHost("smtp.aliyun.com");
  33. /** 默认端口为25 */
  34. mailAccount.setPort(25);
  35. /**
  36. * setAuth(boolean auth) 方法用于设置是否在进行邮件发送或接收时进行身份验证。
  37. * 当设置为 true 时,表示需要进行身份验证,这通常意味着在连接邮件服务器时会使用提供的用户名和密码进行登录。
  38. */
  39. mailAccount.setAuth(true);
  40. /** 用户设置发送人的地址*/
  41. mailAccount.setUser("814736551@aliyun.com");
  42. /** 用户设置发送人的地址*/
  43. mailAccount.setFrom("814736551@aliyun.com");
  44. /** 用户设置发送人的密码*/
  45. mailAccount.setPass("Huang814736551");
  46. MailUtil.send(mailAccount,email,"WMS系统验证码","验证码:"+code,false);
  47. emailMap.put(email,code);
  48. log.info("发送验证码成功");
  49. return 0;
  50. }
  51. /**
  52. * 发送手机验证码
  53. * @return
  54. */
  55. public Integer sendTelCode(String tel) {
  56. /**定义四位随机数 */
  57. int code = RandomUtil.randomInt(1000, 10000);
  58. String url = "https://dfsns.market.alicloudapi.com/data/send_sms";
  59. /**阿里云短信接口 自己掏钱买别用我的 */
  60. String appcode="8f8646c611914b5084c405a2671ddf49";
  61. emailMap.put(tel,code);
  62. String result = HttpRequest.post(url)
  63. /**头信息 APPCODE必须要有一个空格 */
  64. .header("Authorization", "APPCODE " + appcode)
  65. .body("content=code:" + code + "&template_id=TPL_0000&phone_number=" + tel)
  66. .execute().body();
  67. JSONObject object = JSONUtil.parseObj(result);
  68. if(!object.get("status").equals("OK")){
  69. log.error("发送验证码错误:{}",object.get("reason"));
  70. throw new BizException(404,"发送验证码错误");
  71. }
  72. return 0;
  73. }
  74. }

三、打开接口调试工具进行调试

3.1 调试邮箱

 

  • 打开阿里云邮箱查看是否发送验证码

 

3.2 调试手机验证码

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/908872
推荐阅读
相关标签
  

闽ICP备14008679号