Loading... ## 利用阿里云短信服务发送短信验证码: ### 导入坐标: ```java <!--阿里巴巴短信服务--> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-dysmsapi</artifactId> <version>2.2.1</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.6.0</version> </dependency> ``` ### SMSUtils 短信发送工具类,我们直接使用就可以了,不需要修改什么 ```java package com.bdm.reggie.util; import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest; import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.profile.DefaultProfile; /** * 短信发送工具类 */ public class SMSUtils { /** * 发送短信 * @param signName 签名 * @param templateCode 模板 * @param phoneNumbers 手机号 * @param param 参数 */ public static void sendMessage(String signName, String templateCode,String phoneNumbers,String param){ DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "LTAI5t7CvKC", "rjJ4JuSxYkvz8104Og"); IAcsClient client = new DefaultAcsClient(profile); SendSmsRequest request = new SendSmsRequest(); request.setSysRegionId("cn-hangzhou"); request.setPhoneNumbers(phoneNumbers); request.setSignName(signName); request.setTemplateCode(templateCode); request.setTemplateParam("{\"code\":\""+param+"\"}"); try { SendSmsResponse response = client.getAcsResponse(request); System.out.println("短信发送成功"); }catch (ClientException e) { e.printStackTrace(); } } } ``` ### 生成随机验证码工具类: ```java package com.bdm.reggie.util; import java.util.Random; /** * 随机生成验证码工具类 */ public class ValidateCodeUtils { /** * 随机生成验证码 * @param length 长度为4位或者6位 * @return */ public static Integer generateValidateCode(int length){ Integer code =null; if(length == 4){ code = new Random().nextInt(9999);//生成随机数,最大为9999 if(code < 1000){ code = code + 1000;//保证随机数为4位数字 } }else if(length == 6){ code = new Random().nextInt(999999);//生成随机数,最大为999999 if(code < 100000){ code = code + 100000;//保证随机数为6位数字 } }else{ throw new RuntimeException("只能生成4位或6位数字验证码"); } return code; } /** * 随机生成指定长度字符串验证码 * @param length 长度 * @return */ public static String generateValidateCode4String(int length){ Random rdm = new Random(); String hash1 = Integer.toHexString(rdm.nextInt()); String capstr = hash1.substring(0, length); return capstr; } } ``` ### 业务层:(重点) 一定要填写正确下面的**签名名称**和 **模板CODE** ,否则可以发送不了短信验证码 ```java /** * 发送验证码 * @param user * @return */ @PostMapping("/sendMsg") private R<String> sendMsg(@RequestBody User user, HttpSession session){ log.info(user.toString()); // 获取手机号 final String phone = user.getPhone(); if(phone != null){ // 生成随机的4位验证码 final String code = ValidateCodeUtils.generateValidateCode(4).toString(); log.info("code={}", code); // 调用阿里云提供的短信服务API完成发送短信 SMSUtils.sendMessage("签名名称","模板CODE", phone, code); // 需要将生成的验证码保存到Session session.setAttribute(phone, code); return R.success("手机验证码发生成功!"); } return R.error("短信发送失败!"); } ``` ## 利用qq邮箱发送短信验证码: ### 导入坐标: ```java <!-- 邮箱验证--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> ``` ### application.yml配置: ```java server: port: 8080 spring: application: # 应用的名称,可选 name: reggie_take_out datasource: druid: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql:///reggie?useSSL=false&useServerPrepStmts=true&serverTimezone=UTC username: root password: xxxx mail: # SMTP服务器 host: smtp.qq.com # 发送验证码邮箱(更改自己的邮箱) username: 1302509xxx@qq.com # 授权码 (更改自己的验证码) password: qxihcixxxx # 编码 default-encoding: utf-8 port: 587 # 配置SSL 加密工厂 properties: mail: smtp: socketFactoryClass: javax.net.ssl.SSLSocketFactory #表示开启 DEBUG 模式,这样,邮件发送过程的日志会在控制台打印出来,方便排查错误 debug: true ``` ### 发送qq邮件工具类: #### 高级邮箱参考: 可以发附件和解析html ```java @Service public class SendMailServiceImpl2 implements SendMailService { @Autowired private JavaMailSender javaMailSender; //发送人 private String from = "bdmxxx@126.com"; //接收人 private String to = "1474xxx@qq.com"; //标题 private String subject = "测试邮件"; //正文 private String context = "<img src='https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fbkimg.cdn.bcebos.com%2Fpic%2F8326cffc1e178a82b9018131e84f648da97739124247&refer=http%3A%2F%2Fbkimg.cdn.bcebos.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1645001879&t=f4d8895e53576eacf54605dcc63c6861'/><a href='https://www.bdmcom.cn'>点开有惊喜</a>"; @Override public void sendMail() { try { MimeMessage message = javaMailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message,true); helper.setFrom(from+"(大聪明本当迷)"); helper.setTo(to); helper.setSubject(subject); helper.setText(context,true); //添加附件 File f1 = new File("C:\\Users\\14740\\IdeaProjects\\springboot-study\\springboot_23_mail\\target\\springboot_23_mail-0.0.1-SNAPSHOT.jar"); File f2 = new File("C:\\Users\\14740\\IdeaProjects\\springboot-study\\springboot_23_mail\\src\\main\\resources\\logo.png"); // 参数一:附件的名字,参数二:附件的文件 helper.addAttachment(f1.getName(),f1); helper.addAttachment("最帅的本当迷.png", f2); javaMailSender.send(message); } catch (Exception e) { e.printStackTrace(); } } } ``` #### 普通邮件参考: 可以发文本形式 ```java package com.bdm.reggie.common; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Component; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; /** * @author Ken-Chy129 * @date 2022/4/16 16:40 */ @Component public class SendSmg { @Autowired private JavaMailSender javaMailSender; @Value("${spring.mail.username}") private String from; public void sendEmail(String to, String subject, String context) { try { MimeMessage mimeMessage = javaMailSender.createMimeMessage(); MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true); mimeMessageHelper.setFrom(from); mimeMessageHelper.setTo(to); mimeMessageHelper.setSubject(subject); mimeMessageHelper.setText(context, true); javaMailSender.send(mimeMessage); } catch (MessagingException e) { throw new RuntimeException(e); } } } ``` ### 测试类:(重点) ```java package com.bdm.reggie; import com.bdm.reggie.common.SendSmg; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class ReggieApplicationTests { @Autowired private SendSmg sendSmg; @Test void contextLoads() { sendSmg.sendEmail("目标邮箱地址", "邮箱标题", "邮箱内容"); } } ``` 最后修改:2022 年 08 月 16 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 1 如果文章有用,请随意打赏。