SpringBoot实现发送邮件(验证码,文本,附件)

本文最后更新于:2023年11月9日 晚上

SpringBoot发送邮箱信息

验证码的作用:网上找的解答,防止恶意注册和暴力破解所谓恶意注册和暴力破解都是用软件进行的。
人工注册再快,也需要一项一项输入资料,速度很慢,对服务器基本没有影响。如果没有验证码可以使用软件注册的话,可以同时运行成千上万个线程,一次能注册成千上万个用户,让服务器的数据库很快变得臃肿不堪,运行效率下降。如果一个无聊的人或竞争对手对某网站怀有敌意,那么这种方法很容易就能让对方瘫痪。

除了邮箱验证码,对手机验证码感兴趣的朋友可以看我另一篇博客:Java如何实现发送手机短信验证码

1. 配置测试邮箱

这里选用QQ邮箱进行测试(也可以选择其他邮箱,可能相关的配置不同)
1. 首先登陆进邮箱,进入设置

2. 在设置中找到服务一栏,选择把POP3/SMTP服务开启(注:我这里使用过,所以已经是开启的)

3. 点击开启之后会验证当前QQ账户的身份,会提示要用密保手机发送个短信,发了之后就开启了
注:这个开启POP3/SMTP服务服务授权码要提前保存下来或者截个图(后面会用到),如果没保存的话可能就要再验证一次身份,会再要求用密保手机发送验证短信,所以不找那个麻烦哈

2. 配置SpringBoot项目项目中配置

1. 在Maven的pom.xml文件中导入依赖

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>

2. 在application.properties文件中进行配置,下面有两个修改的地方:username=邮箱账号(就是之前配置测试邮箱的账号),password=授权码
注意两点:1_邮箱账号是之前配置测试邮箱的账号xxxxx@qq.com
2_password是前面开启POP3/SMTP服务保存的授权码(不是你的邮箱密码哈,记住了)

1
2
3
4
5
spring.mail.username=1邮箱账号
spring.mail.password=2授权码
spring.mail.host=smtp.qq.com
#开启加密验证
spring.mail.properties.mail.smtp.ssl.enable=true

3. 编写测试代码(下面介绍两种发送邮件的方式)
第一种方式(只发送一些简单的文字信息):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

@Autowired
JavaMailSenderImpl mailSender;

@Test
void contextLoads() {
/*一封简单的邮件*/
SimpleMailMessage mailMessage = new SimpleMailMessage();
/*邮件标题*/
mailMessage.setSubject("邮件验证码");
/*邮件内容(随机生成验证码)*/
String code = UUID.randomUUID().toString().substring(0,4);
mailMessage.setText(code);
/*发送人(必须和配置文件中的username相同)*/
mailMessage.setFrom("授权邮箱xxxx@qq.com");
/*收件人*/
mailMessage.setTo("收件邮箱xxxx@qq.com");
/*发送*/
mailSender.send(mailMessage);
}

话不多说,上效果图:

第二种(可以发送附件比如图片、还可以改变文字样式):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

@Autowired
JavaMailSenderImpl mailSender;


@Test
void contextLoads2() throws Exception{
/*一封复杂的邮件*/
MimeMessage mimeMessage = mailSender.createMimeMessage();
/*组装*/
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
/*邮件标题*/
helper.setSubject("邮件测试");
/*邮件内容(随便添加个CSS样式,比如文字颜色红色),注:为true才能解析HTML元素,如果为false会解析为字符串*/
helper.setText("<p style='color:red'>123</p>",true);
/*附件(并且发送一张偶像的帅照过去(绝对地址))*/
helper.addAttachment("刘德华.jpg",new File("D:\\图片\\刘德华.jpg"));
/*发送人(必须和配置文件中的username相同)*/
helper.setFrom("授权邮箱xxxx@qq.com");
/*收件人*/
helper.setTo("收件邮箱xxxx@qq.com");
/*发送*/
mailSender.send(mimeMessage);
}

效果图:

可以给用户发验证码,或者按一定的业务需求发送附件,比如图片这些,也能让一些重要信息不同的CSS样式显示

最好的感觉,是有人懂你的欲言又止。

SpringBoot实现发送邮件(验证码,文本,附件)
http://example.com/2020/05/27/SpringBoot实现发送邮件/
作者
阿波~
发布于
2020年5月27日
更新于
2023年11月9日
许可协议