个人名片:
博主:酒徒ᝰ.
专栏:瑞吉外卖
个人简介:沉醉在酒中,借着一股酒劲,去拼搏一个未来。
本篇励志:如果决意去做一件事了就不要再问自己和别人值不值得。
本项目基于B站黑马程序员Java项目实战《瑞吉外卖》,轻松掌握springboot + mybatis plus开发核心技术的真java实战项目。
视频链接【黑马程序员Java项目实战《瑞吉外卖》,轻松掌握springboot + mybatis
plus开发核心技术的真java实战项目】 https://www.bilibili.com/video/BV13a411q753?
点击观看
一、原因
对于个人来说,几乎是申请不到短信的模板签名。这些模板一般是企业所用。
我们只是练习项目,没有必须花费金钱去申请到签名,最好却只有一两次。
最后,也是最重要的一点。白嫖的才是最香的。
自己添加
因为前端代码修改的话很麻烦,所有就直接将验证码发送发送到邮箱了。
在发送验证码操作中进行添加如下代码。
二、邮箱
- 邮箱的优点
QQ邮箱向用户提供安全、稳定、快速、便捷电子邮件服务的邮箱产品,已为超过1亿的邮箱用户提供免费和增值邮箱服务。
QQ邮件服务以高速电信骨干网为强大后盾,独有独立的境外邮件出口链路,免受境内外网络瓶颈影响,全球传信。
采用高容错性的内部服务器架构,确保任何故障都不影响用户的使用,随时随地稳定登录邮箱,收发邮件通畅无阻。
- 代码实现
在生成验证码,紧接着执行以下代码,将验证码发送到你的邮箱。需要有两个邮箱才可以哦!
一个邮箱发送,一个邮箱接受。
//QQ邮箱发送验证码
try {
userService.send_email("接收邮箱", "邮件标题");
} catch (Exception e) {
throw new RuntimeException(e);
}
完整代码如下:
/**
* 发送验证码
* @param user
* @param session
* @return
*/
@PostMapping("/sendCode")
public R<String> sendCode(@RequestBody User user, HttpSession session){
//获取移动端输入手机号
String phone = user.getPhone();
//手机号不为空,则发送验证码。
if (StringUtils.isNotEmpty(phone)){
//生成验证码
String code = ValidateCodeUtils.generateValidateCode(4).toString();
log.info("code:{}", code);
//短信发送验证码 就不写了
//QQ邮箱发送验证码
try {
userService.send_email("接收邮箱", "邮件标题");
} catch (Exception e) {
throw new RuntimeException(e);
}
//保存验证码 session
session.setAttribute(phone, code);
return R.success("验证码发送成功");
}
return R.error("验证码发送失败");
}
在IUserService中建立send_email接口
这里为了更好的阅读,就将业务写入了业务层中,其实,每一个地方都应该这么做。
void send_email(String email, String msg) throws Exception;
在实现类中实现方法
package com.itheima.reggie.service.impl;
import com.itheima.reggie.entity.User;
import com.itheima.reggie.mapper.UserMapper;
import com.itheima.reggie.service.IUserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.itheima.reggie.utils.Email_Util;
import org.springframework.stereotype.Service;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Date;
import java.util.Properties;
/**
* <p>
* 用户信息 服务实现类
* </p>
*
* @author 酒徒
* @since 2022-09-04
*/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
@Override
public void send_email(String email, String msg) throws Exception{
String to = email; //发送到哪个邮箱,及目标邮箱
String subject = "验证码"; //邮件标题
String content = msg; //邮件内容
Properties properties = new Properties();
properties.put("mail.smtp.host", "smtp.qq.com");
properties.put("mail.smtp.port", "25");//邮箱端口号
properties.put("mail.smtp.auth", "true");
Authenticator authenticator = new Email_Util("发送邮箱", "发送邮箱的授权码,这个网上很容易找到教程的");//你的邮箱,与授权码
javax.mail.Session sendMailSession = javax.mail.Session.getDefaultInstance(properties, authenticator);
MimeMessage mailMessage = new MimeMessage(sendMailSession);
mailMessage.setFrom(new InternetAddress("发送邮箱"));//发送邮件的地址/就填你的qq邮箱
// Message.RecipientType.TO属性表示接收者的类型为TO
mailMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
mailMessage.setSubject(subject, "UTF-8");
mailMessage.setSentDate(new Date());
// MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
Multipart mainPart = new MimeMultipart();
// 创建一个包含HTML内容的MimeBodyPart
BodyPart html = new MimeBodyPart();
html.setContent(content.trim(), "text/html; charset=utf-8");
mainPart.addBodyPart(html);
mailMessage.setContent(mainPart);
Transport.send(mailMessage);
}
}