Springboot实战:发送邮件hutool+thymeleaf支持自定义模板(附git源码下载)

Springboot-cli 开发脚手架系列



前言

本教程分为普通版邮件发送,和自定模板发送。

  • 普通发送
    内容以字符串的形式发送,样式单一。
  • 自定义模块发送
    可自定义Html模板,样式丰富,配合thymeleaf绑定变量,实现更自由的数据绑定。

1. 开通发送邮件功能

  • 这里以QQ邮箱为例
  • 打开qq邮箱,切换至账号菜单
    在这里插入图片描述
  • 拉到下面账号安全,开启IMAP/SMTP服务

在这里插入图片描述

  • 保存这个秘钥
    在这里插入图片描述
  • 接下来我们开始实战案例

2. 环境配置

  • 导入依赖
      <!--     hutool工具包  -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.7.22</version>
        </dependency>
        <!-- 邮件依赖,配置hutool工具包发送邮件  -->
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>javax.mail</artifactId>
            <version>1.6.2</version>
        </dependency>
        <!-- 模板引擎,制作邮件模板 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
  • yml配置
email:
  host: smtp.qq.com
  from: xxx@qq.com
  # 密码自行登录邮箱开启获取,操作很简单
  pass: xxxxxxxxxxxxxx
  port: 25

3. 邮件配置

  • EMailConfig.java
@Data
@Component
@ConfigurationProperties(prefix = EMailConfig.PRE)
public class EMailConfig {

    public final static String PRE = "email";

    private String host;
    private Integer port;
    private String from ;
    private String pass;

    public MailAccount getAccount() {
        MailAccount account = new MailAccount();
        account.setAuth(true);
        account.setHost(host);
        account.setPort(port);
        account.setFrom(from);
        account.setUser(from);
        account.setPass(pass);
        return account;
    }
}

4. 邮件服务

  • EmailService.java
/**
 * 邮件服务
 *
 * @author ding
 */
@Service
@Slf4j
@RequiredArgsConstructor
public class EmailService {

     private final EMailConfig eMailConfig;

    private final TemplateEngine templateEngine;

    /**
     * 发送邮件
     *
     * @param to      目标邮箱
     * @param subject 标题
     * @param content 内容
     */
    public void send(String to, String subject, String content) {
        MailUtil.send(eMailConfig.getAccount(), to, subject, content, false);
    }

    /**
     * 发送邮件(带附件)
     *
     * @param to      目标邮箱
     * @param subject 标题
     * @param content 内容
     * @param files   附件(可选)
     */
    public void send(String to, String subject, String content, File... files) {
        MailUtil.send(eMailConfig.getAccount(), to, subject, content, false, files);
    }

    /**
     * 发送邮件-读取自定义模板
     *
     * @param to      目标邮箱
     * @param subject 标题
     * @param context 内容
     */
    public void send(String to, String subject, Context context) {
        String template = templateEngine.process("emailTemplate", context);
        MailUtil.send(eMailConfig.getAccount(), to, subject, template, true);
    }


    /**
     * 发送邮件-读取自定义模板(带附件)
     *
     * @param to      目标邮箱
     * @param subject 标题
     * @param context 内容
     * @param files   附件
     */
    public void send(String to, String subject, Context context, File... files) {
        String template = templateEngine.process("emailTemplate", context);
        MailUtil.send(eMailConfig.getAccount(), to, subject, template, true, files);
    }
}
  • 模板文件放置在src/main/resources/templates目录下
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8" />
    <title>激活码</title>
</head>
<body>
    <h4>欢迎登录Springboot-cli</h4>
    您好,您的激活码为<span style="color: blue" th:text="${code}"></span>,请在5分钟内使用完成操作。
</body>
</html>
  • 整体项目结构
    在这里插入图片描述

5. 效果演示

  • 编写测试类
@SpringBootTest
class DomeApplicationTests {

    @Autowired
    private EmailService emailService;

    @Test
    void send1() {
        emailService.send("xxx@qq.com", "测试邮件", "欢迎使用springboot-cli开发脚手架");
    }

    @Test
    void send2() {
        File file = new File("D:\\test\\test.txt");
        emailService.send("xxx@qq.com", "测试邮件", "欢迎使用springboot-cli开发脚手架", file);
    }

    @Test
    void send3() {
        Context context = new Context();
        context.setVariable("code", 6666);
        emailService.send("xxx@qq.com", "激活码模板邮件", context);
    }

    @Test
    void send4() {
        File file = new File("D:\\test\\test.txt");
        Context context = new Context();
        context.setVariable("code", 6666);
        emailService.send("xxx@qq.com", "激活码模板邮件", context, file);
    }
}
  • 普通邮件
    在这里插入图片描述
  • 自定义模板
    在这里插入图片描述

6. 源码分享

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全栈小定

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值