• 通过SpringBoot整合邮件发送,来实现短信发送和接收验证码的功能,通常用来作为手机号登录获取验证码的平替。
  • 实测使用不同邮箱发送邮件只需要更改配置文件中的账户、授权码和SMTP服务端口即可。

准备工作

  1. 注册邮箱——此处使用qq邮箱来发送和接收验证码。
  2. 开启SMTP服务——在邮箱的设置中开启SMTP服务,获取16位的授权码。
  3. 创建SpringBoot项目,引入邮件发送的依赖。
    1
    2
    3
    4
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>

开发简单邮件

简单邮件:仅包含邮件标题,邮件正文的普通邮件(无附件,无图片)

  • 在配置文件中添加上右键配置需要的mail参数,qq邮箱的配置方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    spring:
    mail:
    password: jliccztlnhnvjaji
    username: 邮件地址
    host: 邮件的SMTP服务器地址 # qq邮箱的SMTP服务器地址是smtp.qq.com
    port: 465 # 发送的端口号必须是 465 或 587
    properties:
    mail:
    smtp:
    auth: true
    ssl:
    enable: true
  • API

    • JavaMailSender: 发送邮件的客户端
      • send(mail)
    • SimpleMailMessage: 封装简单邮件的Bean
      • setSubject(标题)
      • setText(正文)
      • setFrom(发送人)
      • setTo(接收人)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@SpringBootTest
public class MailTest {
@Autowired
private JavaMailSender sender;

private String subject = "邮件标题";
private String content = "邮件内容";
private String to = "1330132229@qq.com";
private String from = to;

@Test
public void testSimpleMail(){
SimpleMailMessage mail = new SimpleMailMessage();
mail.setSubject(subject);
mail.setTo(to);
mail.setFrom(from);
mail.setText(content);
sender.send(mail);
System.out.println("邮件发送完毕");
}
}
  • 此时就能接收到发送的邮件了。

开发复杂邮件

复杂邮件:包含邮件标题,邮件正文,附件,图片等的邮件

  • API
    • JavaMailSender: 发送邮件的客户端
      • send(mail)
    • MimeMessage: 封装复杂邮件的Bean
      • sender.createMimeMessage()
    • MimeMessageHelper: 封装复杂邮件的辅助工具
      • setSubject(标题)
      • setText(正文, isHtml)
      • setFrom(发送人)
      • setTo(接收人)
      • addAttachment(附件名, 附件文件)
  • 结果预览:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
@SpringBootTest
public class MailTest {
@Autowired
private JavaMailSender sender;

private String subject = "邮件标题";
private String content = "邮件内容";
private String to = "18669513992@163.com";
private String from = to;

/**
* 发送简单邮件(纯文本文字)
*/
@Test
public void testSimpleMail(){
SimpleMailMessage mail = new SimpleMailMessage();
mail.setSubject(subject);
mail.setTo(to);
mail.setFrom(from);
mail.setText(content);
sender.send(mail);
System.out.println("邮件发送完毕");
}

/**
* 发送复杂邮件(带图片和附件)
*/
@Test
public void testMimeMail() throws MessagingException {
MimeMessage mail = sender.createMimeMessage();
// 通过辅助工具来创建邮件,如果邮件中有附件则需要设置第二个参数为true,用来设置邮件结构为 Multipart(多部分)模式
MimeMessageHelper helper = new MimeMessageHelper(mail,true);

// 这几个方法有异常,需要抛出
helper.setSubject(subject);
// 第二个参数为标志位,用来确定是否解析邮件中的html语法,设置为false则不会解析html语法
helper.setText(content+"<img src=https://raw.githubusercontent.com/silvan2077/markdown_pic/main/Picgo/20251106171903.png >",true);
helper.setTo(to);
helper.setFrom(from);

// 添加附件
File file = new File("D:\\7jgyre.png");
helper.addAttachment(file.getName(), file);

// 发送邮件
sender.send(mail);
System.out.println("邮件发送完毕");
}
}