首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Spring Boot 2发送邮件手把手图文教程

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

作者头像
乱敲代码
发布2019-06-03 14:51:49
发布2019-06-03 14:51:49
80000
代码可运行
举报
文章被收录于专栏:Java系列文章Java系列文章
运行总次数:0
代码可运行

点击上方 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 加依赖

代码语言:javascript
代码运行次数:0
运行
复制
<dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-mail</artifactId></dependency>

2 写配置

代码语言:javascript
代码运行次数:0
运行
复制
spring:  mail:    host: smtp.126.com    username: eacdy0000@126.com    password: 上面设置的授权码

2.2 发送简单邮件

代码语言:javascript
代码运行次数:0
运行
复制
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邮件。

代码语言:javascript
代码运行次数:0
运行
复制
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";}

结果类似下图:

2.4 发送带附件的邮件

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

代码语言:javascript
代码运行次数:0
运行
复制
@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基本能满足日常工作中多数需求。但如果能将附件内联在邮件内容中,那么体验就更好啦!如何实现附件的内联呢?

代码语言:javascript
代码运行次数:0
运行
复制
@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/ 目录中

代码语言:javascript
代码运行次数:0
运行
复制
<h1>亲爱的${username}, 欢迎关注${event}</h1>

编码:

代码语言:javascript
代码运行次数:0
运行
复制
@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";}

此时,结果类似下图:

三、配套代码

•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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 乱敲代码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、邮箱配置
  • 二、编码
    • 2.1 准备工作
    • 2.2 发送简单邮件
    • 2.3 发送HTML邮件
    • 2.4 发送带附件的邮件
    • 2.5 发送带内联附件的邮件
    • 2.6 发送基于Freemarker模板的邮件
  • 三、配套代码
  • 干货分享
  • 近期热文
  • 关注我
    • References
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档