赞
踩
开发项目中很多场景需要使用邮箱发送验证码 和手机发送验证码功能。
- <dependency>
- <groupId>cn.hutool</groupId>
- <artifactId>hutool-all</artifactId>
- <version>5.8.16</version>
- </dependency>
- <!--使用邮箱服务 -->
- <dependency>
- <groupId>com.sun.mail</groupId>
- <artifactId>javax.mail</artifactId>
- <version>1.6.2</version>
- </dependency>
-
- package com.beiyou.controller;
-
- import com.beiyou.service.UserService;
- 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;
-
- @RestController
- @RequestMapping("/api/user")
- public class UserController {
- @Autowired
- private UserService userService;
- /** 发送邮箱验证码 */
- @GetMapping("/send/code")
- public Integer sendCode(String email) {
- return userService.sendCode(email);
- }
- /**发送手机验证码 */
- @GetMapping("/send/tel/code")
- public Integer sendTelCode(String tel){
- return userService.sendTelCode(tel);
- }
-
- }
-
- package com.beiyou.service;
-
- import cn.hutool.core.util.RandomUtil;
- import cn.hutool.extra.mail.MailAccount;
- import cn.hutool.extra.mail.MailUtil;
- import cn.hutool.http.HttpRequest;
- import cn.hutool.json.JSONObject;
- import cn.hutool.json.JSONUtil;
- import cn.smart.core.exception.BizException;
- import com.beiyou.dao.UserDao;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
-
- import java.util.HashMap;
-
- @Service
- @Slf4j
- public class UserService {
- @Autowired
- private UserDao userDao;
- /**
- * 目前暂时将发送的邮箱和验证码存到map中 真正做项目是存到redis里
- */
- private static HashMap<String,Integer> emailMap=new HashMap();
- /**
- * 发送邮箱验证码
- */
- public Integer sendCode(String email) {
- /**定义四位随机数 */
- int code = RandomUtil.randomInt(1000, 10000);
- /**这个对象记录了邮箱服务器的记录的信息 */
- MailAccount mailAccount = new MailAccount();
- /** smtp 表示协议 aliyun 表示邮箱类型,可以换成qq等 */
- mailAccount.setHost("smtp.aliyun.com");
- /** 默认端口为25 */
- mailAccount.setPort(25);
- /**
- * setAuth(boolean auth) 方法用于设置是否在进行邮件发送或接收时进行身份验证。
- * 当设置为 true 时,表示需要进行身份验证,这通常意味着在连接邮件服务器时会使用提供的用户名和密码进行登录。
- */
- mailAccount.setAuth(true);
- /** 用户设置发送人的地址*/
- mailAccount.setUser("814736551@aliyun.com");
- /** 用户设置发送人的地址*/
- mailAccount.setFrom("814736551@aliyun.com");
- /** 用户设置发送人的密码*/
- mailAccount.setPass("Huang814736551");
- MailUtil.send(mailAccount,email,"WMS系统验证码","验证码:"+code,false);
- emailMap.put(email,code);
- log.info("发送验证码成功");
- return 0;
-
- }
-
- /**
- * 发送手机验证码
- * @return
- */
- public Integer sendTelCode(String tel) {
- /**定义四位随机数 */
- int code = RandomUtil.randomInt(1000, 10000);
- String url = "https://dfsns.market.alicloudapi.com/data/send_sms";
- /**阿里云短信接口 自己掏钱买别用我的 */
- String appcode="8f8646c611914b5084c405a2671ddf49";
- emailMap.put(tel,code);
- String result = HttpRequest.post(url)
- /**头信息 APPCODE必须要有一个空格 */
- .header("Authorization", "APPCODE " + appcode)
- .body("content=code:" + code + "&template_id=TPL_0000&phone_number=" + tel)
- .execute().body();
- JSONObject object = JSONUtil.parseObj(result);
- if(!object.get("status").equals("OK")){
- log.error("发送验证码错误:{}",object.get("reason"));
- throw new BizException(404,"发送验证码错误");
- }
- return 0;
-
-
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。