SpringBoot JavaMailSender发送邮件功能(实例详解)

 更新时间:2024年03月15日 11:45:25   作者:Mr.朱鹏  
JavaMailSender是Spring提供的,非常好用的,实现邮件发送的接口 ,这篇文章主要介绍了SpringBoot JavaMailSender发送邮件功能,需要的朋友可以参考下

JavaMailSender是什么

JavaMailSender是Spring提供的,非常好用的,实现邮件发送的接口

在Spring Boot的Starter模块中也为此提供了自动化配置,支持发送邮件

JavaMailSenderImpl是spring封装的邮件发送封装类,支持普通文本、附件、html。

发送简单邮件

简单邮件就是指邮件内容是一个普通的文本文档

public class MailTest {
    @Autowired
    private JavaMailSender javaMailSender;
    @Autowired
    private TemplateEngine templateEngine;
    @Test
    public void sendSimpleMail() {
        SimpleMailMessage message = new SimpleMailMessage();    // 构建一个邮件对象
        message.setSubject("邮件主题:这是一封测试邮件");            // 设置邮件主题
        message.setFrom("xxx@qq.com");                    // 设置邮件发送者
        message.setTo("xxx@xx.cn");                 // 设置邮件接收者,可以有多个接收者
//        message.setCc("xx@xx.cn");               // 设置邮件抄送人,可以有多个抄送人
//        message.setBcc("xx@xx.cn");              // 设置隐秘抄送人,可以有多个
        message.setSentDate(new Date());                        // 设置邮件发送日期
        String mailMsg = "这是由Springboot发送的第一封简单测试邮件,发件人:xx-哈哈";
        message.setText(mailMsg);                               // 设置邮件的正文
        javaMailSender.send(message);                           // 发送邮件
    }

发送带附件的邮件

图片、普通文件,都是支持的

  @Test
    public void sendAttachFileMail() throws MessagingException {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
        helper.setSubject("邮件主题:这是一封测试带附件的邮件");
        helper.setFrom("xx@qq.com");
        helper.setTo("xx@qq.com");
//        helper.setCc("xx@xx.cn");
//        helper.setBcc("xx@xx.cn");
        helper.setSentDate(new Date());
        helper.setText("这是由Springboot发送的第二封带附件的邮件,发件人:x-哈哈");
        File file = new File("/Users/xx/朱x/朱x.jpg");
        helper.addAttachment("xx.jpg", file);
        javaMailSender.send(mimeMessage);
    }

发送带图片资源的邮件

图片资源和附件有什么区别呢?图片资源是放在邮件正文中的,即一打开邮件,就能看到图片。但是一般来说,不建议使用这种方式,一些公司会对邮件内容的大小有限制(因为这种方式是将图片一起发送的)。

 @Test
    public void sendImgResMail() throws MessagingException {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
        helper.setSubject("邮件主题:这是一封测试带图片资源的邮件");
        helper.setFrom("xx@qq.com");
        helper.setTo("xx@qq.com");
        helper.setSentDate(new Date());
        helper.setText("<p>hello 大家好,这是一封测试邮件,这封邮件包含两种图片,分别如下</p><p>第一张图片:</p><img src='cid:p01'/><p>第二张图片:</p><img src='cid:p02'/>", true);
        helper.addInline("p01", new FileSystemResource(new File("/Users/xx/朱x/xx.jpg")));
        helper.addInline("p02", new FileSystemResource(new File("/Users/zhupeng/xx/WechatIMG47.jpg")));
        javaMailSender.send(mimeMessage);
    }

使用 Freemarker 作邮件模板

在公司实际开发中,第一种和第三种都不是使用最多的邮件发送方案。因为正常来说,邮件的内容都是比较的丰富的,所以大部分邮件都是通过 HTML 来呈现的,
如果直接拼接 HTML 字符串,这样以后不好维护,为了解决这个问题,一般邮件发送,都会有相应的邮件模板。
最具代表性的两个模板就是 Freemarker 模板和 Thyemeleaf 模板了

    @Test
    public void sendFreemarkerMail() throws MessagingException, IOException, TemplateException {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
        helper.setSubject("邮件主题:这是一封Freemarker渲染的邮件");
        helper.setFrom("xx@qq.com");
        helper.setTo("xx@qq.com");
        helper.setSentDate(new Date());
        // 构建 Freemarker 的基本配置
        Configuration configuration = new Configuration(Configuration.VERSION_2_3_0);
        configuration.setClassLoaderForTemplateLoading(MailTest.class.getClassLoader(), "templates");
        Template template = configuration.getTemplate("mail_freemarker.ftl");
        // 模板渲染,渲染的结果将被保存到 out 中 ,将out 中的 html 字符串发送即可
        StringWriter out = new StringWriter();
        template.process(new User(1001, "xx", 10000.00), out);
        helper.setText(out.toString(), true);
        javaMailSender.send(mimeMessage);
    }

使用 Thymeleaf 作邮件模板,带附件+图片

  public void sendThymeleafMail() throws MessagingException {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
        helper.setSubject("邮件主题:这是一封Thymeleaf渲染的邮件");
        helper.setFrom("xx@qq.com");
        helper.setTo("xx@qq.com");
        helper.setSentDate(new Date());
        File file = new File("/Users/xx/xx/xx.jpg");
        helper.addAttachment("xx.jpg", file);
        helper.setText("<p>hello 大家好,这是一封测试邮件,这封邮件包含一种图片,如下</p><p>第一张图片:</p><img src='cid:p01'/>", true);
        helper.addInline("p01", new FileSystemResource(new File("/Users/xx/朱x/朱x.jpg")));
        Context context = new Context();
        context.setVariable("userName", "朱xx");
        context.setVariable("num", "000001");
        context.setVariable("salary", "99999");
        String process = templateEngine.process("mail_thymeleaf.html", context);
        helper.setText(process, true);
        javaMailSender.send(mimeMessage);
    }

到此这篇关于SpringBoot JavaMailSender发送邮件功能的文章就介绍到这了,更多相关SpringBoot JavaMailSender发送邮件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java的application.yml文件的配置全过程

    Java的application.yml文件的配置全过程

    本文介绍了在Java项目中使用application.yml文件进行配置的方法,重点讲解了数据源、连接池、MyBatis、MyBatis-Plus和Redis的配置,同时,还介绍了如何使用别名来简化MyBatis的配置
    2026-03-03
  • Kotlin 基础教程之注解与java中的注解比较

    Kotlin 基础教程之注解与java中的注解比较

    这篇文章主要介绍了Kotlin 基础教程之注解与java中的注解比较的相关资料,需要的朋友可以参考下
    2017-06-06
  • 浅谈SpringCloud的微服务架构组件

    浅谈SpringCloud的微服务架构组件

    这篇文章主要介绍了浅谈SpringCloud的微服务架构组件,Spring Cloud根据分布式服务协调治理的需求成立了许多子项目,每个项目通过特定的组件去实现,需要的朋友可以参考下
    2023-04-04
  • JDBC的扩展知识点总结

    JDBC的扩展知识点总结

    这篇文章主要介绍了JDBC的扩展知识点总结,文中有非常详细的代码示例,对正在学习JDBC的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-05-05
  • 详解Java利用深度优先遍历解决迷宫问题

    详解Java利用深度优先遍历解决迷宫问题

    深度优先遍历:深度优先遍历是图论中的经典算法。其利用了深度优先搜索算法可以产生目标图的相应拓扑排序表,采用拓扑排序表可以解决很多相关的图论问题,如最大路径问题等等。本文将利用深度优先遍历解决迷宫问题,感兴趣的可以了解一下
    2022-02-02
  • Java中的构造方法(构造函数)与普通方法区别及说明

    Java中的构造方法(构造函数)与普通方法区别及说明

    这篇文章主要介绍了Java中的构造方法(构造函数)与普通方法区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • JAVA生成八位不重复随机数最快的方法总结(省时间省空间)

    JAVA生成八位不重复随机数最快的方法总结(省时间省空间)

    随机数在实际中使用很广泛,比如要随即生成一个固定长度的字符串、数字,这篇文章主要给大家介绍了关于JAVA生成八位不重复随机数最快的方法,文中介绍的方法省时间省空间,需要的朋友可以参考下
    2024-03-03
  • 在Android中使用WebView在线查看PDF文件的方法示例

    在Android中使用WebView在线查看PDF文件的方法示例

    在Android应用开发中,有时我们需要在客户端展示PDF文件,以便用户可以阅读或交互,这篇文章主要介绍了在Android中使用WebView在线查看PDF文件的方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-09-09
  • java用户名密码验证示例代码分享

    java用户名密码验证示例代码分享

    这篇文章主要介绍了java用户名密码验证示例代码,需要的朋友可以参考下
    2014-03-03
  • java线程之用Thread类创建线程的方法

    java线程之用Thread类创建线程的方法

    本篇文章介绍了,Thread类创建线程的方法。需要的朋友参考下
    2013-05-05

最新评论