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

点击上方 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服务

0108ef4d289721ccfcb318a4f8b3c15e.png

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

1e19d8948f98b6c4e99f2f5496cef1f7.png

二、编码

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

结果类似下图:

f45347289af8a000699047c5b56def86.png

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

结果类似下图:

234f56ea67f3890fdcb3e373192ee1f1.png

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

结果类似下图:

e2e1d771de0f8734a1fe3c860b4363cf.png

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 必须一致。

结果类似下图:

9a6cba46db30771dcb85952381cfe1d3.png

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

此时,结果类似下图:

7f443dcb832619b95701fe9cb817831c.png

三、配套代码

•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新特性!超实用!

关注我

d87c5dc7586d75637fc097ff913e4df0.png

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433627.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web——Request请求

•Request通用方式获取请求参数 ○ 请求参数获取方式&#xff1a; GET方式&#xff1a;□ String getQueryString() POST方式&#xff1a;□ BufferedReader getReader()○ 通用方式&#xff1a; Map<String, String[]> getParameterMap()//获取所有参数Map集合 String[]…

mfc点击按钮让对话框关闭_WinXP系统开始菜单中关机按钮消失的恢复教程

WinXP系统开始菜单里面的关机按钮不见了怎么办&#xff1f;最近有用户反映&#xff0c;打开WinXP系统的开始菜单准备关机时&#xff0c;却发现无法关机了&#xff0c;开始菜单里面没有关机按钮&#xff0c;这是怎么回事&#xff1f;本文就为大家介绍XP系统恢复开始菜单关机按钮…

马逊s3云存储接口_当对象存储“湖”有了强一致性

从 2006年第一个云服务对象存储服务 Amazon S3 发布直到 2020年12月1日之前&#xff0c;S3 对象操作都是遵循 “最终一致性”原则&#xff0c;对象存储服务本身就是一个复杂的分布式系统&#xff0c;但对用户暴露简单的 API 服务接口&#xff0c;无限扩展存储大小&#xff0c;极…

Web——Request转发和Response重定向

• Request请求转发 ○ 请求转发 请求转发&#xff08;forward&#xff09;&#xff1a;一种在服务器内部的资源跳转方式 ○ 实现方式&#xff1a; request.getRequestDispatcher("资源B路径").forward(request,response);○ 请求转发资源间共享数据&#xff1a;使用…

if else if语句格式_闲话Python之条件语句IF

我发现好像哪里都会有if&#xff0c;下面就来聊聊Python当中if的常见用法。最简单的格式就是&#xff0c;只有一个if&#xff0c;比如下面这个&#xff1a;my_deposit代码中的my_deposit50000等效于my_depositmy_deposit50000his_deposit-50000则等效于his_deposithis_deposit-…

delphi下实现ribbon界面的方法(一)

delphi下实现ribbon界面的方法&#xff08;一&#xff09; office 2007和2010是现在大多数人经常使用的办公软件&#xff0c;几乎每天都在使用。因此&#xff0c;在软件中如果使用类office的界面样式&#xff0c;客户用着非常习惯&#xff0c;而且学习曲线低&#xff0c;office…

Web笔记——Filter过滤器

○ 概念&#xff1a;Filter表示过滤器&#xff0c;是JavaWeb三大组件(Servlet、Filter、Listener)之一。 ○ 过滤器可以把对资源的请求拦截下来&#xff0c;从而实现一些特殊的功能。 ○ 过滤器一般完成一些通用的操作&#xff0c;比如&#xff1a;权限控制、统一编码处理、敏感…

mysql修改语句_序言:MySQL与Navicat安装Tips

一、数据库相关的基础知识1.1 数据分析师主要集中在select高效查找上&#xff0c;纯粹的底层运维就不需要太关注&#xff1b;1.2 数据库与表类比sheet是表&#xff0c;整个Excel文件是一个数据库&#xff1b;1.3 行与列1.4 主键&#xff08;人的身份证&#xff09;表的主键不做…

java office文件加水印_永中Office与统一操作系统UOS完成适配,开辟高效智能办公新领域...

近日&#xff0c;永中Office办公软件完成了与统一操作系统UOS的适配工作&#xff0c;此次成功适配表明信息技术应用创新操作系统与办公软件兼容性能优良、运行稳定&#xff0c;大幅提升用户在信创计算机上的办公体验&#xff0c;可为政企提供安全可靠的IT环境。永中Office是由永…

c3p0依赖导入失败问题

今天在学习c3p0的时侯&#xff0c;导入依赖后变红然后去maven仓库[&#xff08;https://mvnrepository.com/artifact/com.mchange/c3p0&#xff09;]中找&#xff0c;发现是groupId的问题。 更改后正常

c++ char*初始化_C开发实战-深入理解指针

Visual Studio 2019 解决方案的多项目应用在讲述变量&#xff0c;数据类型&#xff0c;运算符和表达式以及程序流程控制&#xff0c;数组&#xff0c;函数的相关内容&#xff0c;所有的代码都放在解决方案c-core的c-core-foundational项目下。如果你有其他编程语言经验&#xf…

java游戏服务器面试_我做游戏开发这八年

点击上方“CSDN学院精品课”&#xff0c;选择“置顶公众号”CSDN学院精品课 IT人的职业提升平台作者 | kakashi8841简述这篇文章并不是想教会大家如何开发游戏&#xff0c;更不能教大家如何成为技术总监。而是分享我一路做开发的一些经历或心得体验。与编程擦肩而过2004年&…

SSM(Spring、SpringMVC、MyBatis)框架笔记——Spring入门

一、Spring简介 Spring是分层的Java SE/EE应用full-stack 轻量级开源框架&#xff0c; 以IoC&#xff08;Inverse Of Control&#xff1a;反转控制&#xff09;和AOP&#xff08;Aspect Oriented Programming&#xff1a;面向切面编程&#xff09;为内核。提供了展现层SpringM…

c++ 字符串拼接_字符串拼接新姿势:StringJoiner

来自&#xff1a;Hollis(微信号&#xff1a;hollischuang)在为什么阿里巴巴不建议在for循环中使用””进行字符串拼接一文中&#xff0c;我们介绍了几种Java中字符串拼接的方式&#xff0c;以及优缺点。其中还有一个重要的拼接方式我没有介绍&#xff0c;那就是Java 8中提供的S…

html5 内嵌网页_如何分析并优化网页的性能?新梦想软件测试

一个网站的网页是好是坏&#xff0c;往往是体现在速度和高度两个方面&#xff0c;速度是网页所展示出来的时间&#xff0c;能否为浏览用户节约时间。高度则是一个网站网页本身的质量&#xff0c;能否为浏览用户带来真正的好体验。然而看似简单的两个点&#xff0c;但是背后要实…

怎么修改file文件框的无文件提示_使用LativeLink时,DO文件编制步骤

大侠好&#xff0c;欢迎来到FPGA技术江湖&#xff0c;江湖偌大&#xff0c;相见即是缘分。大侠可以关注FPGA技术江湖&#xff0c;在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源&#xff0c;或者一起煮酒言欢。今天和大侠简单聊聊使用LativeLink时&#xff0c;…

Spring笔记——数据源配置

常见的数据源&#xff08;连接池&#xff09;包括&#xff1a;DBCP、C3P0、BoneCP、Druid等接下来以C3P0为例讲述一下spring配置数据源的过程数据源的开发步骤 ①导入数据源的坐标和数据库驱动坐标 ②设置数据源的基本连接数据&#xff0c;将其放入jdbc.properties文件中 ③app…

间歇性掉帧卡顿_电脑卡顿问题靠它解决,我只能帮你到这儿了

因为不可抗力的原因&#xff0c;我们都要在家里呆上一段时间&#xff0c;在这期间之中如果电脑出现问题可是一件非常糟心的事情&#xff0c;因为没有人会去给你上门维修&#xff0c;线下门店又关门大吉&#xff0c;一切只能靠自己。抢救一下电脑最常见的问题就是卡顿&#xff0…

SpringMVC遇到的问题——GET http://localhost/spring_mvc_war_exploded/js/jquery-3.3.1.js net::ERR_ABORTED 404

学习SSM时遇到的问题GET http://localhost/spring_mvc_war_exploded/js/jquery-3.3.1.js net::ERR_ABORTED 404新建了js包&#xff0c;并在包下导入了jquery-3.3.1/js&#xff0c;发布项目后通过浏览器开发者工具 发现报错&#xff0c;信息如下&#xff1a;这个问题的解决方案&…

educoder平台_22个在线平台,2.4万门网课

截至2020年2月2日&#xff0c;教育部组织了22个在线课程平台制定了多样化在线教学解决方案&#xff0c;免费开放包括1291门国家精品在线开放课程和401门国家虚拟仿真实验课程在内的在线课程2.4万余门&#xff0c;覆盖了本科12个学科门类、专科高职18个专业大类&#xff0c;供高…