点击上方 IT牧场 ,选择 置顶或者星标技术干货每日送达!

本文基于: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邮箱为例:

1 开启SMTP服务

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

二、编码

2.1 准备工作

1 加依赖

  org.springframework.boot  spring-boot-starter-mail

2 写配置

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

2.2 发送简单邮件

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邮件。

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("

HTML内容..

", true); this.javaMailSender.send(message); return "success";}

结果类似下图:

2.4 发送带附件的邮件

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

@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("

HTML内容..

", true); messageHelper.addAttachment("附件名称", new ClassPathResource("wx.jpg")); this.javaMailSender.send(message); return "success";}

结果类似下图:

2.5 发送带内联附件的邮件

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

@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("

HTML内容..

", 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/ 目录中

亲爱的${username}, 欢迎关注${event}

编码:

@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 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";}

此时,结果类似下图:

三、配套代码

•GitHub[1]•Gitee[2]

干货分享

最近将个人学习笔记整理成册,使用PDF分享。关注我,回复如下代码,即可获得百度盘地址,无套路领取!

•001:《Java并发与高并发解决方案》学习笔记;•002:《深入JVM内核——原理、诊断与优化》学习笔记;•003:《Java面试宝典》•004:《Docker开源书》•005:《Kubernetes开源书》•006:《DDD速成(领域驱动设计速成)》

近期热文

•面试官问我,SpringApplication.run做了哪些事?•分享:个人是怎么学习新知识的•MySQL数据库“十宗罪”(十大经典错误案例)•干货|Spring Cloud Stream 体系及原理介绍•Spring Cloud Alibaba系列教程-03-搭建生产可用的Nacos集群•我最喜欢的Mybatis 3.5新特性!超实用!

关注我

References

[1] GitHub: https://github.com/eacdy/spring-boot-study/tree/master/spring-boot-mail[2] Gitee: https://gitee.com/itmuch/spring-boot-study/tree/master/spring-boot-mail

点"在看"是一种美德^_^

java 邮件模板_Spring Boot 2发送邮件手把手图文教程相关推荐

  1. java 邮件模板_Spring Boot 优雅地发送邮件

    最近在项目开发中有向使用者发送报警通知的功能,其中报警媒介就包括邮件,这篇文章就简单介绍了 Spring Boot 如何快速集成实现邮件发送. 通常在实际项目中,也有其他很多地方会用到邮件发送,比如通 ...

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

    本文基于:Spring Boot 2.1.3,理论支持Spring Boot 2.x所有版本. 最近有童鞋问到笔者如何用Spring Boot发送邮件,故而整理下Spring Boot发送邮件的各种姿 ...

  3. Spring Boot 2.0 配置图文教程 1

    Spring Boot 2.0 配置图文教程 摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 本章内容 自定义 ...

  4. php 108张牌洗牌,完美洗牌原理大揭秘 手把手图文教程!呕心沥血的超级干货...

    原标题:完美洗牌原理大揭秘 & 手把手图文教程!呕心沥血的超级干货 先感慨一下,昨晚写到半夜,今天又修改了很多遍,我终于把这篇文章写完了. 然后自夸一下,我敢保证,你从来没有看过像这样的完美洗 ...

  5. 采用freemarker模板引擎作为Java邮件模板

    项目需要发送邮件提醒,格式类似于下面这样,总之要换行,排版整齐 1.姓名: 2.年龄: 3.性别: 刚开始的时候,我采用在字符串之间用"\n"来拼接,发现请求返回成功,但是没有收到 ...

  6. java邮件模板_java创建邮件模板

    一直在整发送邮件,由于发送的邮件格式比较固定,是一个固定的表格,我就想能不能做一个邮件的模板,这样在发送邮件的时候只需要将内容填充上去,而不需要像之前一样,每次都要重新拼邮件的内容. 下面先来看一下邮 ...

  7. java邮件模板代码_java创建邮件模板

    一直在整发送邮件,由于发送的邮件格式比较固定,是一个固定的表格,我就想能不能做一个邮件的模板,这样在发送邮件的时候只需要将内容填充上去,而不需要像之前一样,每次都要重新拼邮件的内容. 下面先来看一下邮 ...

  8. java发送会议邀请邮件模板_Spring 发送邮件 HTML邮件

    [java 代码 import java.security.Security;    import java.util.Date;    import java.util.HashMap;    im ...

  9. java邮件模板代码_Java的Spring框架中实现发送邮件功能的核心代码示例

    Spring中已经封装了邮件操作类,通过spring配置文件可以便捷地注入到controller.action等地方. 下面是配置: p:host="${mail.host}" p ...

最新文章

  1. 经验 | 深度学习优化背后的数学基础
  2. Subversion hooks脚本配置演示及排错
  3. iframe 内嵌第三方网站 cookie 失效,解决办法
  4. Android开发学习之路--Notification之初体验
  5. day24-1 元类
  6. bat/cmd将命令执行的结果赋值给变量
  7. LeetCode 443. 压缩字符串(双指针)
  8. vim 使用 Tricks
  9. sshd_config 配置文件
  10. 再谈javascript图片预加载技术(转)
  11. StackPanel:栈式面板基础简述
  12. Matlab coder生成C++代码
  13. 2022年最新广东交安安全员考试题库及答案
  14. java代码餐馆管理系统_java版餐饮管理系统
  15. 意念控制头环:用脑电波来操控智能家居
  16. 转 Unity绳子插件Obi+Rope下载与简单使用方法
  17. Redis 发布订阅功能
  18. 论文阅读 Adaptive Consistency Regularization for Semi-Supervised Transfer Learning
  19. 实用技巧 雷电模拟器导出apk
  20. HTML下拉菜单怎么做成横向,JQuery实现绚丽的横向下拉菜单

热门文章

  1. Linux给Java程序设置端口_扫描服务端口的Java程序
  2. Vue warn: Invalid prop: type check failed for prop “data“. Expected Array, got Object.
  3. springboot 与shiro整合
  4. jQuery 实现Ajax
  5. python安装依赖失败_python执行安装第三方依赖numpy失败:error: Unable to find vcvarsall.bat...
  6. 重学前端----前端知识系统学习推荐专栏
  7. 链表题目汇总(python3)
  8. Newtonsoft.Json反序列化(Deserialize)出错:Bad JSON escape sequence
  9. 每日一题20180330-Linux
  10. Spring3系列7- 自动扫描组件或Bean