前言

在实际项目中,经常需要用到邮件通知功能。比如,用户通过邮件注册,通过邮件找回密码等;又比如通过邮件发送系统情况,通过邮件发送报表信息等等,实际应用场景很多。(但一般都是使用手机验证码🙂)

这篇文章,就教大家通过 springboot 快速的实现一个发送邮件的功能。

开启 smtp

这里以 QQ 邮箱为例。登录 QQ 邮箱之后,点击设置,点击账户。如下图

img

点击开启 IMAP/SMTP 服务。

img

开启之后,记下 QQ 邮箱提示的授权码

img

这个授权码,就是发送邮件时需要的密码。以上步骤完成之后,就可以开始开发了。

引入依赖

创建 springboot 项目就不需要讲了叭

在 springboot 项目中,引入如下依赖

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

配置文件

在 springboot 项目中引入依赖之后,即可在其配置文件中配置邮箱的参数

1
2
3
4
5
6
7
spring:
mail:
host: smtp.qq.com
username: garveyzhong@foxmail.com
password: xxxxxxxxx
protocol: smtp
default-encoding: UTF-8

因为是 QQ 邮箱,所以 host 填写 smtp.qq.com 。如果是其它邮箱的话,请 点击 查看对应的 smtp 地址

username 为邮箱账号,password 为上面步骤中提到的授权码,并不是你的 QQ 密码

注入 JavaMailSender 实例

邮箱参数配置完之后,即可直接注入 JavaMailSender 实例

1
2
@Autowired
private JavaMailSender javaMailSender;

发送普通邮件

普通邮件,没有样式。实现起来最容易

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* 邮件发送者
*/
private static final String FROM = "garveyzhong@foxmail.com";

/**
* 邮件接收者
*/
private static final String TO = "782718644@qq.com";

@Test
void sendMail() {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(FROM);
message.setTo(TO);
message.setSubject("这是标题");
message.setText("这是内容");
javaMailSender.send(message);
}
  • From 需要和配置文件中的 username 一致,否则会报错。
  • To 为邮件接收者;
  • Subject 为邮件的标题;
  • Text 为邮件的内容。

运行方法,即可收到邮件

img

发送HTML邮件

很多时候,我们需要邮件带有美观的样式。这时候,可以使用HTML的样式。我们需要使用 javaMailSendercreateMimeMessage 方法,构建一个 MimeMessage,然后使用 MimeMessage 实例创建出 MimeMessageHelper。如下

1
2
3
4
5
6
7
8
9
10
@Test
void sendHtmlMail() throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage);
messageHelper.setSubject("标题");
messageHelper.setFrom(FROM);
messageHelper.setTo(TO);
messageHelper.setText("<h1>标题</h1><br/><p>这是内容</p>", true);
javaMailSender.send(messageHelper.getMimeMessage());
}

这里需要注意的是,setText 的时候需要传一个布尔值 进去,表明 需要使用HTML样式。

img

可以看到,h1 的样式已经出来了。

好了,就这样了,掰掰,不清楚的评论留言