首页 > 其他分享 >Springboot + ThymeLeaf发送邮件

Springboot + ThymeLeaf发送邮件

时间:2024-08-08 10:56:01浏览次数:8  
标签:Springboot import springframework ThymeLeaf HTML private org mail 邮件

前言

本文介绍了如何使用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: [email protected] #发件人邮箱用户名
    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

标签:Springboot,import,springframework,ThymeLeaf,HTML,private,org,mail,邮件
From: https://blog.csdn.net/qq_38817868/article/details/141020687

相关文章

  • springboot集成 AI 实现图片辅助设计功能
    springboot集成AI实现图片辅助设计功能在SpringBoot中实现一个图片辅助设计功能,通常会涉及到图像处理、计算机视觉以及机器学习(AI)技术的应用。这样的系统可以帮助用户进行图像编辑、风格转换、自动设计布局等。以下是一个基本步骤和技术栈建议,用于在SpringBoot中构建图......
  • springboot英语学习平台 毕业设计源码89605
                           摘 要随着互联网大趋势的到来,社会的方方面面,各行各业都在考虑利用互联网作为媒介将自己的信息更及时有效地推广出去,而其中最好的方式就是建立网络管理系统,并对其进行信息管理。由于现在网络的发达,......
  • 对于找到的每封唯一电子邮件,加载所有相关附件
    我正在尝试自动创建包含与电子邮件关联的所有附件的电子邮件。我有一个Excel文档,正在引用电子邮件和附件。index=0counter=0foremailinemails:mailItem=olApp.CreateItem(0)mailItem.Subject=mailItem.BodyFormat=1mailItem.Body=......
  • 基于SpringBoot教学管理系统的设计与实现(源码+LW+调试文档+讲解等)
     博主介绍:  ......
  • 基于SpringBoot大学生家教管理系统的设计与实现(源码+LW+调试文档+讲解等)
    博主介绍:  ......
  • A098-基于SpringBoot的雪具销售系统(源码+LW+PPT+开发文档+数据库文档+部署说明文档)
    开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9浏览器:谷歌浏览器配置环境安装包:Java配置环境链接:https://cloud.189.cn/t/baeQZrAjEvyy(访问码:pfd5)  ......
  • Ubuntu Linux 搭建邮件服务器(postfix + dovecot)
    准备工作1.一台公网服务器(需要不被服务商限制发件收件的,也就是端口25、110、143、465、587、993、995不被限制),如有防火墙或安全组需要把这些端口开放2.一个域名,最好是comcnorg的一级域名3.域名备案(如果服务器是国外的则不需要备案)一、配置域名解析1.登录阿里云,找到云解......
  • SpringBoot - 自动装配
    SpringBoot-自动装配SpringBoot最核心的功能就是自动装配,Starter作为SpringBoot的核心功能之一,基于自动配置代码提供了自动配置模块及依赖的能力,让软件集成变得简单、易用。使用SpringBoot时,我们只需引人对应的Starter,SpringBoot启动时便会自动加载相关依赖,集成相关功......
  • SpringBoot项目中HTTP请求体只能读一次?试试这方案
    问题描述在基于Spring开发Java项目时,可能需要重复读取HTTP请求体中的数据,例如使用拦截器打印入参信息等,但当我们重复调用getInputStream()或者getReader()时,通常会遇到类似以下的错误信息:大体的意思是当前request的getInputStream()已经被调用过了。那为什么会出现这个问题呢?......
  • springboot的jar在linux上sh启动脚本
     java在linux上start、stop、restart、status等启动命令,sh脚本,appMgr.sh放在reources/ops下#!/usr/bin/shAPP_NAME="@project.name@[email protected]@.jar"DEPLOY_PATH=`pwd`#JVM启动参数1JVM_PARAMS="-Dfastjson.parser.safeMode=true"command=$1#nohup......