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发送邮件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • jpa实体@ManyToOne @OneToMany无限递归方式

    jpa实体@ManyToOne @OneToMany无限递归方式

    这篇文章主要介绍了jpa实体@ManyToOne @OneToMany无限递归方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Java 添加文本框到PPT幻灯片过程解析

    Java 添加文本框到PPT幻灯片过程解析

    这篇文章主要介绍了Java 添加文本框到PPT幻灯片过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Windows下Java调用OCR进行图片识别

    Windows下Java调用OCR进行图片识别

    这篇文章主要为大家详细介绍了Windows下Java调用OCR进行图片识别,通过Tesseract-OCR对图片进行识别,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • SpringBoot如何防止XSS注入攻击详解

    SpringBoot如何防止XSS注入攻击详解

    这篇文章主要给大家介绍了关于SpringBoot如何防止XSS注入攻击的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • Java数据结构之红黑树的真正理解

    Java数据结构之红黑树的真正理解

    这篇文章主要为大家详细介绍了Java数据结构之红黑树的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • 实例解析Java设计模式编程中的适配器模式使用

    实例解析Java设计模式编程中的适配器模式使用

    适配器模式的主要作用是在新接口和老接口之间进行适配,通过将一个类的接口转换成客户期望的另一个接口,让原本不兼容的接口可以合作无间,本文以实例解析Java设计模式编程中的适配器模式使用,需要的朋友可以参考下
    2016-05-05
  • 关于微服务使用Dubbo设置的端口和server.port的区别

    关于微服务使用Dubbo设置的端口和server.port的区别

    这篇文章主要介绍了关于微服务使用Dubbo设置的端口和server.port的区别,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • 简单学习Java+MongoDB

    简单学习Java+MongoDB

    本文给大家介绍的是如何简单的使用java+MongoDB实现数据调用的问题,非常的实用,有需要的小伙伴可以参考下
    2016-03-03
  • 聊聊Mybatis中sql语句不等于的表示

    聊聊Mybatis中sql语句不等于的表示

    这篇文章主要介绍了Mybatis中sql语句不等于的表示方式,具有很好的参考价值,希望对大家有所帮助。
    2021-07-07
  • 浅谈SpringBoot处理url中的参数的注解

    浅谈SpringBoot处理url中的参数的注解

    下面小编就为大家分享一篇浅谈SpringBoot处理url中的参数的注解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01

最新评论