Springboot + ThymeLeaf发送邮件

前言

本文介绍了如何使用SpringBoot中的JavaMailSender发送邮件,包括配置发件箱相关参数以及如何结合模板引擎如Thymeleaf发送HTML邮件。

1、导入jar包。
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
    <version>2.1.5.RELEASE</version>
</dependency>
 2、配置文件中增加发件箱相关配置。
spring:    
  mail:
    host: 163.com #SMTP服务器地址
    port: 465 #SMTP服务器端口
    username: xx@163.com #发件人邮箱用户名
    password: 6ku*jd5SbWamBatj #发件人邮箱密码
    protocol: smtp #邮件协议
    test-connection: true #启动时测试邮件服务器连接
    properties:
      mail:
        smtp:
          ssl:
            enable: true #启用SSL
          auth: true #启用SMTP认证
          starttls:
            enable: true #启用TLS
 3、构建配置类对象。
package com.xx.web.core.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;

import java.util.Properties;

@Configuration
public class MailConfig {
    @Value("${spring.mail.host}")
    private String host;
    @Value("${spring.mail.port}")
    private int port;
    @Value("${spring.mail.username}")
    private String username;
    @Value("${spring.mail.password}")
    private String password;
    @Value("${spring.mail.properties.mail.smtp.auth}")
    private boolean auth;
    @Value("${spring.mail.properties.mail.smtp.starttls.enable}")
    private boolean starttls;
    @Value("${spring.mail.properties.mail.smtp.ssl.enable}")
    private boolean ssl;

    @Bean
    public JavaMailSender javaMailSender() {
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
        mailSender.setHost(host);
        mailSender.setPort(port);
        mailSender.setUsername(username);
        mailSender.setPassword(password);
        Properties properties= mailSender.getJavaMailProperties();
        properties.put("mail.smtp.auth", auth);
        properties.put("mail.smtp.starttls.enable", starttls);
        properties.put("mail.smtp.ssl.enable", ssl);
        return mailSender;
    }

}
4、注入配置项,发送邮件。
package com.xx.web.service;

import com.xx.common.exception.BusinessException;
import com.xx.system.utils.CoreUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.nio.charset.StandardCharsets;
import java.util.Date;

@Service
@Lazy
public class MailService {

    @Value("${spring.mail.username}")
    private String username;

    @Autowired
    private JavaMailSender javaMailSender;

    @Autowired
    TemplateEngine templateEngine;

    /**
     * 验证码模板
     */
    private static final String TMPL_VERIFICATION_CODE = "mail/verificationCode.html";

    private static final String SIGN_NAME = "xx公司";

    /**
     * 使用template模板发送验证码
     * @param mail
     * @return
     */
    public String sendVerificationCode(String mail) {
        String checkCode = CoreUtils.randomString(6, true);
        MimeMessage message = javaMailSender.createMimeMessage();
        try {
            MimeMessageHelper helper = new MimeMessageHelper(message, MimeMessageHelper.MULTIPART_MODE_MIXED_RELATED, StandardCharsets.UTF_8.name());
            // 邮件主题
            helper.setSubject("主题");
            // 需要与发件箱一致
            helper.setFrom(username);
            // 收件人
            helper.setTo(mail);
            // 设置发送时间
            helper.setSentDate(new Date());
            // 设置变量
            Context context = new Context();
            context.setVariable("checkCode", checkCode);
            context.setVariable("signName", SIGN_NAME);
            String process = templateEngine.process(TMPL_VERIFICATION_CODE, context);
            helper.setText(process, true);
        } catch (MessagingException e) {
            throw new BusinessException(e.getMessage(), e);
        }
        javaMailSender.send(message);
        return checkCode;
    }

}
MimeMessageHelper 中 multipartMode 各个值介绍:
  1. MULTIPART_MODE_NO (0):

    • 这表示消息不应该是多部分的,即它应该是一个简单的消息,没有附件或其他相关部分。
    • 当使用此模式时,消息体应该只包含文本或HTML内容。
  2. MULTIPART_MODE_MIXED (1):

    • 这表示消息应该是多部分的,并且包含混合类型的内容。
    • 当使用此模式时,消息可以包含多个部分,比如文本内容、HTML内容和附件。
    • 在此模式下,邮件的各个部分是独立的,附件不会嵌入到HTML内容中。
  3. MULTIPART_MODE_RELATED (2):

    • 这表示消息应该是多部分的,并且包含相关的HTML内容。
    • 当使用此模式时,消息通常包含HTML内容和与其相关的资源,如内嵌图片。
    • 在此模式下,相关资源(如图片)会嵌入到HTML内容中,并且通常会有一个Content-Id来引用这些资源。
  4. MULTIPART_MODE_MIXED_RELATED (3):

    • 这表示消息应该是多部分的,并且既包含混合类型的内容,也包含相关的HTML内容。
    • 当使用此模式时,消息可以包含文本内容、HTML内容和附件,同时HTML内容可以包含内嵌的资源。
    • 这是发送包含内嵌图片和附件的HTML邮件时常用的模式。
 5、调整发送内容模板。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p>【<span th:text="${signName}"></span>】您的验证码为:<span th:text="${checkCode}"></span>,请勿泄漏!如非本人操作,请忽略!</p>
</body>
</html>

参考:IO

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用Spring BootThymeleaf来实现邮箱验证登录功能。下面是一些基本的步骤: 1. 添加所需的依赖:在您的项目的pom.xml文件中添加Spring BootThymeleaf的依赖项。 ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> ``` 2. 创建一个包含登录表单的HTML页面。您可以使用Thymeleaf模板引擎来渲染页面和处理表单提交。 ```html <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Login</title> </head> <body> <h1>Login</h1> <form action="/login" method="post"> <input type="email" name="email" placeholder="Email" required/> <input type="password" name="password" placeholder="Password" required/> <button type="submit">Login</button> </form> </body> </html> ``` 3. 创建一个控制器类来处理登录请求和验证逻辑。 ```java @Controller public class LoginController { @GetMapping("/login") public String showLoginForm() { return "login"; } @PostMapping("/login") public String login(@RequestParam("email") String email, @RequestParam("password") String password) { // 进行邮箱验证和登录逻辑的处理 // ... return "redirect:/home"; } @GetMapping("/home") public String home() { return "home"; } } ``` 4. 创建一个用于显示登录成功页面的HTML模板。 ```html <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Home</title> </head> <body> <h1>Welcome!</h1> </body> </html> ``` 这只是一个基本的示例,您可能还需要添加更多的逻辑来实现完整的邮箱验证和登录功能。您可以使用Spring Security来处理用户认证和授权,以及使用Java Mail API来发送验证邮件。希望这个简单的示例能帮助您入门。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值