跳到主要内容

一分钟实现springboot发送邮件

· 阅读需 2 分钟
Lichlaughing

SpringBoot 发送邮件方式有很多,比如:JavaMailSender、JavaMail API 来发送邮件(灵活 🐒,支持发送日程提醒)、Apache Commons Email 库、或者 hutool 封装的 MailUtil 等等。

这里使用Spring Framework 提供 JavaMailSender 因为它最简单和 springboot 无缝集成。

引入依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>

📮 邮箱配置 。我这里用的腾讯的企业邮箱。

spring:
mail:
host: smtp.exmail.qq.com
username: lichlaughing@lichenghao.cn
password: xxx #一般为授权码
port: 465
protocol: smtp
default-encoding: utf-8
properties:
mail:
smtp:
from: lichlaughing@lichenghao.cn
auth: true
starttls:
enable: true
required: true
ssl:
enable: true
socketFactory:
port: 465
class: javax.net.ssl.SSLSocketFactory

接下来就可以发送普通的文字邮件了哦。

@Resource
private JavaMailSender javaMailSender;

public void sendMail(String to, String subject, String content) {
SimpleMailMessage message = new SimpleMailMessage();
message.setTo(to); // 发给谁
message.setSubject(subject); // 邮件标题
message.setText(content); // 邮件内容
javaMailSender.send(message); // 发送
}

接下来最常用的是发送 html 格式邮件。 使用freemarker模版引擎(还可以用其他的比如thymeleaf) 引入依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

增加一些配置,默认情况下模版会放在 /resources/templates 下

spring:
freemarker:
enabled: true
charset: UTF-8
content-type: text/html
allow-request-override: false
allow-session-override: false
cache: false
check-template-location: true
expose-request-attributes: false
expose-session-attributes: false
expose-spring-macro-helpers: true
prefer-file-system-access: true
suffix: .ftl
settings:
default_encoding: UTF-8
classic_compatible: true

定义一个模板

<html>
<body>
<h3>测试</h3>
<pre>
<code>
{
name:${name}
}
</code>
</pre>
</body>
</html>

发送 html 邮件

public void sendHtmlMail(String to, String subject, AInfo info) {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper;
try {
mimeMessageHelper = new MimeMessageHelper(mimeMessage, true, StandardCharsets.UTF_8.name());
// 发件人,如果不写收件人虽然会收到邮件但是显示无发件人
mimeMessageHelper.setFrom(from);
// 发给谁
mimeMessageHelper.setTo(to);
// 标题
mimeMessageHelper.setSubject(subject);
// 邮件内容,html格式
Template template = freemarkerConfig.getTemplate("模板.ftl");
// 第二个参数可以是对象、map、list等等
String htmlStr = FreeMarkerTemplateUtils.processTemplateIntoString(template, info);
mimeMessageHelper.setText(htmlStr, true);
javaMailSender.send(mimeMessage);
log.info("邮件已经发送给:{}", to);
} catch (Exception e) {
log.error("发送邮件时发生异常!", e);
}
}