前言
大多数小伙伴在练习与学习的过程中在验证时大都使用或验证码,但是验证码相对而言自己的参与只停留在自己的自己写的点击刷新方法上,那有没有什么方法能让我们的互动不止限于网页呢,那就来学一下如何给自己发送一封邮件吧,这个功能我预想是跟用户绑定的所以设计时会与用户有一定的联系。
成果展示
表设计
这里只是为了让我们成功发送邮件所以并不用设计的多么复杂,只需要在用户表中添加两个字段username ,email_address 实体类中是String 表中是varchar.
引入依赖
<!-- 邮件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>2.3.4.RELEASE</version>
</dependency>
</dependencies>
邮箱工具类
/**
* 描述 工具 检验地址是否合法
*/
public class EmailUtil {
public static boolean isValidEmailAddress(String email) throws AddressException {
boolean result = true;
InternetAddress internetAddress = new InternetAddress(email);
try {
internetAddress.validate();
} catch (AddressException e) {
e.printStackTrace();
result = false;
}
return result;
}
}
这里并不需要自己去写校验方法,直接调用InternetAddress 的validate方法就行。
mapper
用来通过邮箱查询用户,看是否已被占用
User selectOneByEmailAddress(String emailAddress);
Xml
<select id="selectOneByEmailAddress" parameterType="java.lang.String" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from xatu_mall_user
where email_address = #{email_address,jdbcType=VARCHAR}
limit 1
</select>
Service
userService
boolean checkEmailRegistered(String emailAddress);
impl
@Override
public boolean checkEmailRegistered(String emailAddress) {
User user = userMapper.selectOneByEmailAddress(emailAddress);
if (user != null) {
return false;
}
return true;
}
EmailService
public interface EmailService {
void sendSimpleMessage(String to, String subject, String text);
}
Impl
/**
* 描述: EmailService实现类
*/
@Service
public class EmailServiceImpl implements EmailService {
@Autowired
private JavaMailSender mailSender;
@Override
public void sendSimpleMessage(String to, String subject, String text) {
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setFrom(Constant.EMAIL_FROM);
simpleMailMessage.setTo(to);
simpleMailMessage.setSubject(subject);
simpleMailMessage.setText(text);
mailSender.send(simpleMailMessage);
}
}
我把常用值写在Constant里了,这里直接填用来发送的邮箱就行,要确保能自己能登陆这个邮箱,后面要去获取一个码。
Controller
@PostMapping("/sendEmail")
@ResponseBody
public ApiRestResponse sendEmail(@RequestParam("emailAddress") String emailAddress)
throws XatuMallException, AddressException {
//检查邮件地址是否有效,检查是否已注册
boolean validEmailAddress = EmailUtil.isValidEmailAddress(emailAddress);
if(validEmailAddress) {
boolean emailPased = userService.checkEmailRegistered(emailAddress);
if (!emailPased) {
return ApiRestResponse.error(100018, "邮箱已注册");
} else{
//发送邮件
emailService.sendSimpleMessage(emailAddress,"主题是测试","Helllo this is a E-mail");
return ApiRestResponse.success();
}
}else{
return ApiRestResponse.error(100020,"非法邮箱");
}
}
写完后要去进行配置
application.properties
spring.mail.host=smtp.qq.com
spring.mail.port=587
spring.mail.username=1228625399@qq.com
spring.mail.password=*****************
spring.mail.default-encoding=utf-8
spring.mail.properties.mail.smtp.auth=true
这里我使用的是qq邮箱,但是听说他这个垃圾邮件判定等级自己不好改有的是用阿里云邮箱
只用注意两个点 username 写自己的邮箱地址
获取授权码
下一个password不是邮箱密码哈,下面说怎么获取这个授权码
进去登录好了以后点击账户,找到下面这个区域
注意我们打开前两个 然后扫码获取那个授权码,把它复制下来添加到配置文件的password栏。
总结
这个技术是很简单的,但是用好它相比于普通的在网页上加验证码我们先声明一个数组,调用函数去把数组打乱去去每次获取验证码,把验证码存起来作为text发送到用户邮箱用来注册,这个方法相比点击验证码就更加有趣了。当然也能用于其他更多的方面~