SpringBoot使用JavaMailSender发送邮件(2)

Easter79
• 阅读 447

为了更容易更规范维护邮件内容,我们推荐使用模板引擎技术。常用的模板引擎有这几种Thymeleaf、FreeMarker、Velocity等。我们在这里就使用前面两种来实现发送邮件。

一、使用Thymeleaf模板技术发送邮件

Thymeleaf是SpringBoot推荐的官方模板引擎技术,使用非常的简单方便。

(1)添加依赖

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

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

(2)编写实现代码

编写发送邮件接口。

import com.example.demo.entity.Member;
import com.example.demo.service.MailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;

import java.util.Arrays;
import java.util.List;

@RestController
public class MailController {

    private final static String FROM_MAIL = "2333@163.com";
    private final static String TO_MAIL = "123@qq.com";

    @Autowired
    MailService mailService;

    @Autowired
    TemplateEngine templateEngine;

    @GetMapping("/sendTemplate")
    public String sendTemplate(){
        //渲染模版
        Member member1 = new Member().setName("张飞").setSex("男").setEmail("123@qq.com");
        Member member2 = new Member().setName("孙尚香").setSex("女").setEmail("222@qq.com");
        Member member3 = new Member().setName("曹操").setSex("男").setEmail("666@qq.com");
        List<Member> memberList = Arrays.asList(member1, member2, member3);

        //通过Context构造模版中变量需要的值
        Context ctx = new Context();
        ctx.setVariable("memberList", memberList);
        //使用TemplateEngine对模版进行渲染
        String mail = templateEngine.process("mail.html", ctx);
        //发送邮箱
        mailService.sendTemplate(FROM_MAIL, TO_MAIL, "邮件的标题", mail);

        return "发送成功";
    }

}

编写发送邮件服务 

public interface MailService {

    void sendTemplate(String from, String to, String subject, String content);

}

import com.example.demo.service.MailService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

@Service
@Slf4j
public class MailServiceImpl implements MailService {

    @Autowired
    JavaMailSender javaMailSender;

    /**
     * 发送html模板邮件
     * @param from 邮件发送者
     * @param to 收件人
     * @param subject 邮件主题
     * @param content html格式的邮件内容
     */
    @Override
    public void sendTemplate(String from, String to, String subject, String content) {
        try {
            MimeMessage message = javaMailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setTo(to);
            helper.setFrom(from);
            helper.setSubject(subject);
            helper.setText(content, true);
            javaMailSender.send(message);
        } catch (MessagingException e) {
            System.out.println("发送失败");
        }
    }
}

编写测试数据实体 

import lombok.Data;
import lombok.experimental.Accessors;

@Data
@Accessors(chain = true)
public class Member {

    private String name;

    private String sex;

    private String email;

}

(3)创建邮件模板

Thymeleaf模版默认位置是resources/templates,我们在该目录下创建一个邮件模版 mail.html。

SpringBoot使用JavaMailSender发送邮件(2)

代码如下:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>邮件模板</title>
    <style type="text/css">
        ul li {
            list-style: none;
            height: 35px;
            line-height:35px;
        }
    </style>
</head>
<body>
    <div>
        <h3>会员信息</h3>
        <ul>
            <li th:each="member: ${memberList}">
                姓名:[[${member.name}]]&nbsp;&nbsp;
                性别:[[${member.sex}]]&nbsp;&nbsp;
                邮箱:[[${member.email}]]
            </li>
        </ul>
    </div>
</body>
</html>

(4)验证结果

访问接口:http://127.0.0.1:8082/sendTemplate

SpringBoot使用JavaMailSender发送邮件(2)

二、使用FreeMarker模板技术发送邮件

(1)添加依赖

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

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

(2)编写实现代码

编写发送邮件接口。

import com.example.demo.TestApplication;
import com.example.demo.entity.Member;
import com.example.demo.service.MailService;
import freemarker.template.Configuration;
import freemarker.template.Template;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.StringWriter;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
public class MailController {

    private final static String FROM_MAIL = "2333@163.com";
    private final static String TO_MAIL = "123@qq.com";

    @Autowired
    MailService mailService;
    
    @GetMapping("/sendTemplate")
    public String sendTemplate(){
        try {
            //配置FreeMarker模版位置
            Configuration configuration = new Configuration(Configuration.VERSION_2_3_0);
            ClassLoader loader = TestApplication.class.getClassLoader();
            configuration.setClassLoaderForTemplateLoading(loader,"ftl");
            //配置模版文件
            Template template = configuration.getTemplate("mail.ftl");

            //渲染模版
            StringWriter mail = new StringWriter();
            Member member1 = new Member().setName("张飞").setSex("男").setEmail("123@qq.com");
            Member member2 = new Member().setName("孙尚香").setSex("女").setEmail("222@qq.com");
            Member member3 = new Member().setName("曹操").setSex("男").setEmail("666@qq.com");
            List<Member> memberList = Arrays.asList(member1, member2, member3);
            Map<String, Object> map = new HashMap();
            map.put("memberList", memberList);
            template.process(map, mail);

            //发送邮箱
            mailService.sendTemplate(FROM_MAIL, TO_MAIL, "邮件的标题", mail.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }

        return "发送成功";
    }

邮件服务和上面的一样,我们这边就不过多描述了。

public interface MailService {

    void sendTemplate(String from, String to, String subject, String content);

}

import com.example.demo.service.MailService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

@Service
@Slf4j
public class MailServiceImpl implements MailService {

    @Autowired
    JavaMailSender javaMailSender;

    /**
     * 发送html模板邮件
     * @param from 邮件发送者
     * @param to 收件人
     * @param subject 邮件主题
     * @param content html格式的邮件内容
     */
    @Override
    public void sendTemplate(String from, String to, String subject, String content) {
        try {
            MimeMessage message = javaMailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setTo(to);
            helper.setFrom(from);
            helper.setSubject(subject);
            helper.setText(content, true);
            javaMailSender.send(message);
        } catch (MessagingException e) {
            System.out.println("发送失败");
        }
    }
}

import lombok.Data;
import lombok.experimental.Accessors;

@Data
@Accessors(chain = true)
public class Member {

    private String name;

    private String sex;

    private String email;

}

(3)创建邮件模板

这里我们resources目录下面创建了一个ftl的文件,在该目录创建了一个mail.ftl文件。

SpringBoot使用JavaMailSender发送邮件(2)

代码如下:

<style type="text/css">
    ul li {
        list-style: none;
        height: 35px;
        line-height:35px;
    }
</style>
<div>
    <h3>会员信息</h3>
    <ul>
        <#list memberList as member>
            <li>姓名:${member.name}&nbsp;&nbsp;性别:${member.sex}&nbsp;&nbsp;邮箱:${member.email}</li>
        </#list>
    </ul>
</div>

(4)验证结果

访问接口:http://127.0.0.1:8082/sendTemplate

SpringBoot使用JavaMailSender发送邮件(2)

点赞
收藏
评论区
推荐文章
秃头王路飞 秃头王路飞
5个月前
webpack5手撸vue2脚手架
webpack5手撸vue相信工作个12年的小伙伴们在面试的时候多多少少怕被问到关于webpack方面的知识,本菜鸟最近闲来无事,就尝试了手撸了下vue2的脚手架,第一次发帖实在是没有经验,望海涵。languageJavaScript"name":"vuecliversion2","version":"1.0.0","desc
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
技术小男生 技术小男生
5个月前
linux环境jdk环境变量配置
1:编辑系统配置文件vi/etc/profile2:按字母键i进入编辑模式,在最底部添加内容:JAVAHOME/opt/jdk1.8.0152CLASSPATH.:$JAVAHOME/lib/dt.jar:$JAVAHOME/lib/tools.jarPATH$JAVAHOME/bin:$PATH3:生效配置
刚刚好 刚刚好
5个月前
css问题
1、在IOS中图片不显示(给图片加了圆角或者img没有父级)<div<imgsrc""/</divdiv{width:20px;height:20px;borderradius:20px;overflow:h
晴空闲云 晴空闲云
5个月前
css中box-sizing解放盒子实际宽高计算
我们知道传统的盒子模型,如果增加内边距padding和边框border,那么会撑大整个盒子,造成盒子的宽度不好计算,在实务中特别不方便。boxsizing可以设置盒模型的方式,可以很好的设置固定宽高的盒模型。盒子宽高计算假如我们设置如下盒子:宽度和高度均为200px,那么这会这个盒子实际的宽高就都是200px。但是当我们设置这个盒子的边框和内间距的时候,那
艾木酱 艾木酱
5个月前
快速入门|使用MemFire Cloud构建React Native应用程序
MemFireCloud是一款提供云数据库,用户可以创建云数据库,并对数据库进行管理,还可以对数据库进行备份操作。它还提供后端即服务,用户可以在1分钟内新建一个应用,使用自动生成的API和SDK,访问云数据库、对象存储、用户认证与授权等功能,可专
Stella981 Stella981
1年前
Spring Boot(三):Thymeleaf 使用详解
在上篇文章SpringBoot(二):web应用开发,实现CRUD(https://my.oschina.net/u/4006148/blog/3163419)中简单介绍了一下Thymeleaf,这篇文章将更加全面详细的介绍Thymeleaf的使用。Thymeleaf是新一代的模板引擎,在Spring4.0中推荐使用Thymeleaf来
Stella981 Stella981
1年前
SpringBoot使用JavaMailSender发送邮件(2)
为了更容易更规范维护邮件内容,我们推荐使用模板引擎技术。常用的模板引擎有这几种Thymeleaf、FreeMarker、Velocity等。我们在这里就使用前面两种来实现发送邮件。一、使用Thymeleaf模板技术发送邮件Thymeleaf是SpringBoot推荐的官方模板引擎技术,使用非常的简单方便。(1)添加依赖
Wesley13 Wesley13
1年前
cobol学习之十数据库的增删改查模板
这次连接数据库使用的是ODBC连接access数据库,里面主要是一个增删改查的模板备份,方便以后查询。000001IDENTIFICATIONDIVISION.000002PROGRAMID.SAMPLEDB2.00
Stella981 Stella981
1年前
SpringBoot使用JavaMailSender发送邮件(1)
邮件发送是一个非常常见的功能,最初Sun公司提供了JavaMail用来实现邮件发送,但是配置烦琐。后来Spring中提供了JavaMailsender用来简化邮件配置,而SpringBoot则提供了MailSenderAutoConfiguration对邮件的发送做了进一步简化。在开始之前我们需要申请开通POP3/SMTP服
helloworld_28799839 helloworld_28799839
5个月前
常用知识整理
Javascript判断对象是否为空jsObject.keys(myObject).length0经常使用的三元运算我们经常遇到处理表格列状态字段如status的时候可以用到vue