pursue wind pursue wind
首页
Java
Python
数据库
框架
Linux
中间件
前端
计算机基础
DevOps
项目
面试
书
关于
归档
MacOS🤣 (opens new window)
GitHub (opens new window)
首页
Java
Python
数据库
框架
Linux
中间件
前端
计算机基础
DevOps
项目
面试
书
关于
归档
MacOS🤣 (opens new window)
GitHub (opens new window)
  • mybatis

  • mybatis-plus

  • Spring

  • SpringBoot

    • 文档

      • SpringBoot+Security-发送短信验证码
      • SpringBoot-三大基本注解
      • SpringBoot-多模块
      • Springboot-秒杀项目
      • SpringBoot2-0响应式编程系列(一)-导读
      • SpringBoot统一异常处理
      • SpringBoot集成BootStrap
      • SpringBoot集成RabbitMQ
      • Springboot集成Thymeleaf
      • SpringBoot集成Thymeleaf模板
    • Log4j2配置
    • SpingBoot整合AOP
    • Spring Boot 2发送邮件手把手图文教程
      • 一、邮箱配置
      • 二、编码
        • 2.1 准备工作
        • 2.2 发送简单邮件
        • 2.3 发送HTML邮件
        • 2.4 发送带附件的邮件
        • 2.5 发送带内联附件的邮件
        • 2.6 发送基于Freemarker模板的邮件
      • 三、配套代码
    • Spring Boot 2实现分布式锁——这才是实现分布式锁的正确姿势!
    • Spring Boot 启动配置原理
    • SpringBoot 启动 Banner
    • SpringBoot 定时任务
    • SpringBoot 引入本机jar包 配置
    • SpringBoot 线程池配置 定时任务,异步任务
  • SpringSecurity

  • SpringCloud

  • 单元测试框架Mockito
  • 框架
  • SpringBoot
pursuewind
2020-11-23
目录

Spring Boot 2发送邮件手把手图文教程

# Spring Boot 2发送邮件手把手图文教程

http://www.imooc.com/article/285710

本文基于:Spring Boot 2.1.3,理论支持Spring Boot 2.x所有版本。

最近有童鞋问到笔者如何用Spring Boot发送邮件,故而整理下Spring Boot发送邮件的各种姿势。

说到邮件放松,相信大家对Spring Framework提供的接口 JavaMailSender 都不陌生。那么Spring Boot是否有开箱即用的邮件发送呢?

答案是肯定的。Spring Boot为发送邮件提供了starter:spring-boot-starter-mail 。

本文详细探讨如何用Spring Boot发送邮件。

# 一、邮箱配置

以126邮箱为例:

  • 开启SMTP服务

    126邮箱开启SMTP-1

  • 设置/重置客户端授权密码

    126邮箱开启SMTP-2

# 二、编码

# 2.1 准备工作

  • 加依赖

    1 2 3 4 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
  • 写配置

    1 2 3 4 5 spring: mail: host: smtp.126.com username: eacdy0000@126.com password: 上面设置的授权码

# 2.2 发送简单邮件

1 2 3 4 5 6 7 8 9 10 11 12 13 public String simple() { SimpleMailMessage message = new SimpleMailMessage(); // 发件人邮箱 message.setFrom(this.mailProperties.getUsername()); // 收信人邮箱 message.setTo("511932633@qq.com"); // 邮件主题 message.setSubject("简单邮件测试"); // 邮件内容 message.setText("简单邮件测试"); this.javaMailSender.send(message); return "success"; }

结果类似下图:

发送简单邮件

# 2.3 发送HTML邮件

简单邮件是没有样式的,很多时候,我们希望发送的邮件内容带有样式,此时可发送HTML邮件。

1 2 3 4 5 6 7 8 9 10 11 12 13 public String html() throws MessagingException { MimeMessage message = javaMailSender.createMimeMessage(); MimeMessageHelper messageHelper = new MimeMessageHelper(message); messageHelper.setFrom(this.mailProperties.getUsername()); messageHelper.setTo("511932633@qq.com"); messageHelper.setSubject("HTML内容邮件测试"); // 第二个参数表示是否html,设为true messageHelper.setText("<h1>HTML内容..</h1>", true); this.javaMailSender.send(message); return "success"; }

结果类似下图:

发送HTML邮件

# 2.4 发送带附件的邮件

很多场景下,需要为邮件插入附件,此时该怎么办呢?继续上代码——

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 @GetMapping("/attach") public String attach() throws MessagingException { MimeMessage message = this.javaMailSender.createMimeMessage(); // 第二个参数表示是否开启multipart模式 MimeMessageHelper messageHelper = new MimeMessageHelper(message, true); messageHelper.setFrom(this.mailProperties.getUsername()); messageHelper.setTo("511932633@qq.com"); messageHelper.setSubject("带附件的邮件测试"); // 第二个参数表示是否html,设为true messageHelper.setText("<h1>HTML内容..</h1>", true); messageHelper.addAttachment("附件名称", new ClassPathResource("wx.jpg")); this.javaMailSender.send(message); return "success"; }

结果类似下图:

发送带附件的邮件

# 2.5 发送带内联附件的邮件

附件 + HTML基本能满足日常工作中多数需求。但如果能将附件内联在邮件内容中,那么体验就更好啦!如何实现附件的内联呢?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 @GetMapping("/inline-attach") public String inlineAttach() throws MessagingException { MimeMessage message = this.javaMailSender.createMimeMessage(); // 第二个参数表示是否开启multipart模式 MimeMessageHelper messageHelper = new MimeMessageHelper(message, true); messageHelper.setFrom(this.mailProperties.getUsername()); messageHelper.setTo("511932633@qq.com"); messageHelper.setSubject("内联附件的邮件测试"); // 第二个参数表示是否html,设为true messageHelper.setText("<h1>HTML内容..<img src=\"cid:attach\"/></h1>", true); messageHelper.addInline("attach", new ClassPathResource("wx.jpg")); this.javaMailSender.send(message); return "success"; }

由代码可知,只需在想要内联的地方使用 cid:xx 引用内联附件,然后用 addInline(xx, file) 指定附件即可。两处的 xx 必须一致。

结果类似下图:

发送带内联附件的邮件

# 2.6 发送基于Freemarker模板的邮件

上面的例子中,邮件内容是直接以字符串体现的,这通常不适合生产,因为实际项目中邮件往往带有变量。此时,可考虑使用Freemarker模板(或者其他模板,Spring Boot 2.x默认支持Freemarker、Groovy、Thymeleaf、Mustache四种模板引擎,也可根据需求使用其他模板引擎)。

  • 创建Freemarker模板文件mail.ftl,并将其存放在resources/templates/ 目录中

    1 <h1>亲爱的${username}, 欢迎关注${event}</h1>
  • 编码:

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 @GetMapping("/freemarker") public String freemarker() throws MessagingException, IOException, TemplateException { MimeMessage message = this.javaMailSender.createMimeMessage(); // 第二个参数表示是否开启multipart模式 MimeMessageHelper messageHelper = new MimeMessageHelper(message, true); messageHelper.setFrom(this.mailProperties.getUsername()); messageHelper.setTo("511932633@qq.com"); messageHelper.setSubject("基于freemarker模板的邮件测试"); Map<String, Object> model = new HashMap<>(); model.put("username", "itmuch"); model.put("event", "IT牧场大事件"); String content = FreeMarkerTemplateUtils.processTemplateIntoString( this.freemarkerConfiguration.getTemplate("mail.ftl"), model); // 第二个参数表示是否html,设为true messageHelper.setText(content, true); this.javaMailSender.send(message); return "success"; }

此时,结果类似下图:

发送基于Freemarker模板的邮件

# 三、配套代码

  • GitHub (opens new window)
  • Gitee (opens new window)
Last Updated: 2023/02/14, 18:02:00
SpingBoot整合AOP
Spring Boot 2实现分布式锁——这才是实现分布式锁的正确姿势!

← SpingBoot整合AOP Spring Boot 2实现分布式锁——这才是实现分布式锁的正确姿势!→

Theme by Vdoing | Copyright © 2019-2023 pursue-wind | 粤ICP备2022093130号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
  • 飙升榜
  • 新歌榜
  • 云音乐民谣榜
  • 美国Billboard榜
  • UK排行榜周榜
  • 网络DJ