SpringBoot系列之邮件发送姿态介绍
邮件发送,在理论的我的项目开发中,可能用的不是特地多,如果没有特定的需要,置信也没有多少小伙伴会特意的去关注,那么如果当初咱们心愿针对我的项目做一个异样的报警零碎,当出现异常的时候,能够向指定的小伙伴发送邮件揭示,那么让咱们来实现这个性能,能够怎么办呢?
这里介绍一下如何应用SpringBoot封装好的MailSender来实现邮件发送
<!-- more -->
I. 我的项目环境
1. 我的项目依赖
本我的项目借助SpringBoot 2.2.1.RELEASE
+ maven 3.5.3
+ IDEA
进行开发
开一个web服务用于测试
<dependencies> <!-- 邮件发送的外围依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <!-- 实用于html模板模式的邮件发送,借助freemarker来实现html模板渲染 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency></dependencies>
2. 配置
在开始之前,咱们须要先筹备一个用于发送邮件的账号,比方我这里应用163的邮箱来发送邮件,须要先到邮箱提供商哪里获取受权码,具体如何获取这个货色,不同的邮箱姿态有些不同,各位小伙伴依据本人的理论状况,搜寻一下,置信很快就能get到
这里简略介绍下网易邮箱的获取形式
接下来设置发送邮件相干的配置信息,配置文件application.yml
spring: #邮箱配置 mail: host: smtp.163.com from: xhhuiblog@163.com # 应用本人的发送方用户名 + 受权码填充 username: password: default-encoding: UTF-8 properties: mail: smtp: auth: true starttls: enable: true required: true
II. 邮件发送
接下来进入正题,咱们将从简略根底的文本邮件发送开始,逐步介绍如何增加附件,应用丑陋的html模板等
1. 简略文本邮件发送
咱们这里间接应用JavaMailSender
来发送一个根底的文本邮件
@Servicepublic class MailDemo { @Autowired private JavaMailSender javaMailSender; @Value("${spring.mail.from:xhhuiblog@163.com}") private String from; private void basicSend() { SimpleMailMessage simpleMailMessage = new SimpleMailMessage(); //邮件发送人 simpleMailMessage.setFrom(from); //邮件接管人,能够是多个,参数为可变参数 simpleMailMessage.setTo("bangzewu@126.com"); //邮件主题,也就是题目 simpleMailMessage.setSubject("SpringBoot测试邮件发送"); //邮件内容 simpleMailMessage.setText("简略的邮件注释"); javaMailSender.send(simpleMailMessage); }}
- JavaMailSender: 间接作为一个Spring 的bean对象应用
SimpleMailMessage:简略的邮件对象,外面有一些邮件发送时,关联的根底信息
- from: 发送方
- replyTo: 邮件回复的收件人
- to: 收件人
- cc: 抄送
- bcc: 密送
- subject: 主题,也就是邮件题目
- text: 邮件注释,文本格式
- date: 邮件发送工夫
2. html发送
对于简略的文本邮件发送,用下面的根本就够了,如果咱们心愿邮件的内容更好看一点的话,能够借助HTML来实现排版
区别于下面的SimpleMailMessage, 这里应用的是MimeMessage,来实现html内容发送
应用姿态与下面相比差不多,无非就是注释变成了html文本罢了
/** * 发送html */public void sendHtml() throws MessagingException { MimeMessage mimeMailMessage = javaMailSender.createMimeMessage(); MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMailMessage, true); mimeMessageHelper.setFrom(from); mimeMessageHelper.setTo("bangzewu@126.com"); mimeMessageHelper.setSubject("SpringBoot测试邮件发送"); //邮件内容 mimeMessageHelper.setText("<h1>Hello World</h1> <br/> " + "<div> 欢送点击 <a href=\"https://blog.hhui.top\">一灰灰博文地址</a><br/>" + " <img width=\"200px\" height=\"200px\" src=\"https://blog.hhui.top/hexblog/imgs/info/wx.jpg\"/>" + "</div>", true); javaMailSender.send(mimeMailMessage);}
重点留神
- 留神下面的
setText
办法的第二个参数,必须有,且为true,否则会当成文本内容发送
3. 增加附件
邮件中增加附件,咱们本人写邮件的时候能够间接抉择附件上传,那么代码的实现形式又有什么区别呢?
/** * 发送附件 */public void sendWithFile() throws MessagingException, IOException { MimeMessage mimeMailMessage = javaMailSender.createMimeMessage(); MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMailMessage, true); mimeMessageHelper.setFrom(from); mimeMessageHelper.setTo("bangzewu@126.com"); mimeMessageHelper.setSubject("SpringBoot测试邮件发送"); mimeMessageHelper.setText("<h1>Hello World</h1> <br/> " + "<div> 欢送点击 <a href=\"https://blog.hhui.top\">一灰灰博文地址</a><br/>" + " <img width=\"200px\" height=\"200px\" src=\"https://blog.hhui.top/hexblog/imgs/info/wx.jpg\"/>" + "</div>"); String url = "https://blog.hhui.top/hexblog/imgs/info/wx.jpg"; URL imgUrl = new URL(url); mimeMessageHelper.addAttachment("img.jpg", imgUrl::openStream); javaMailSender.send(mimeMailMessage);}
留神下面的实现,与后面差异不大,关键点在于attachment
附件,下面的实现是在附件中增加一个图片,为了简略起见,图片是间接从网络下载的,而后将Stream作为传参
4. Freemaker模板
下面的html发送,会发现须要咱们本人来组装html注释,这个操作可能就不是很美妙了,借助页面渲染引擎来实现邮件模板反对,能够说是一个比拟常见的计划了,这里简略介绍下Freemaker的实现姿态,至于themlaf, beef或者jsp啥的,都没有太大的区别
首先写一个邮件模板 resources/template/mail.ftl
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content="SpringBoot thymeleaf"/> <meta name="author" content="YiHui"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/> <title>邮件模板</title></head><style> .title { color: #c00; font-weight: normal; font-size: 2em; } .content { color: darkblue; font-size: 1.2em; } .sign { color: lightgray; font-size: 0.8em; font-style: italic; }</style><body><div> <div class="title">${title}</div> <div class="content">${content}</div></div></body></html>
下面的模板中,定义了两个变量,一个title
,一个content
,这个就是咱们须要替换的值
接下来是邮件发送实例
import freemarker.template.Configuration;@Autowiredprivate Configuration configuration;/** * freemarker 模板 */public void freeMakerTemplate() throws MessagingException, IOException, TemplateException { MimeMessage mimeMailMessage = javaMailSender.createMimeMessage(); MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMailMessage, true); mimeMessageHelper.setFrom(from); mimeMessageHelper.setTo("bangzewu@126.com"); mimeMessageHelper.setSubject("SpringBoot测试邮件发送"); Map<String, Object> map = new HashMap<>(); map.put("title", "邮件题目"); map.put("content", "邮件注释"); String text = FreeMarkerTemplateUtils.processTemplateIntoString(configuration.getTemplate("mail.ftl"), map); mimeMessageHelper.setText(text, true); String url = "https://blog.hhui.top/hexblog/imgs/info/wx.jpg"; URL imgUrl = new URL(url); mimeMessageHelper.addAttachment("img.jpg", imgUrl::openStream); javaMailSender.send(mimeMailMessage);}
留神下面的实现,关键点就利用FreeMarkerTemplateUtils
来实现模板的渲染,输入html注释,因而如果想应用其余的模板渲染引擎,就是改这里即可
5. 测试与小结
最初简略的调用一下下面的实现,看下邮件是否能够发送胜利
本篇博文介绍了一下如何发送邮件,并针对简略的文本邮件,html注释,附件等不同的给出了实例;整体看下来应用姿态不难,不过邮件的几个术语能够理解一下
- to: 接管人,就是邮件发送的指标大众
- cc: 抄送,一般来讲抄送的名单,只是让他感知到有这封邮件,属于周知对象
- bcc: 密送,与下面两个不一样,接管人和抄送人不晓得密送给谁了,这就是最大的区别,说实话这个玩意我从没用过
接下来一篇博文,将介绍一下如何将log日志与邮件发送关联起来,当出现异常的时候,邮件发送给开发者
III. 不能错过的源码和相干知识点
0. 我的项目
- 工程:https://github.com/liuyueyi/spring-boot-demo
- 源码:https://github.com/liuyueyi/spring-boot-demo/tree/master/spring-boot/
1. 一灰灰Blog
尽信书则不如,以上内容,纯属一家之言,因集体能力无限,不免有疏漏和谬误之处,如发现bug或者有更好的倡议,欢送批评指正,不吝感谢
上面一灰灰的集体博客,记录所有学习和工作中的博文,欢送大家前去逛逛
- 一灰灰Blog集体博客 https://blog.hhui.top
- 一灰灰Blog-Spring专题博客 http://spring.hhui.top