本节介绍SpringBoot项目如何快速配置和发送邮件,包括简单的邮件配置、发送简单邮件、发送HTML邮件、发送携带附件的邮件等。

示例源码在:https://github.com/laolunsi/spring-boot-examples


一、邮箱配置

要确保使用的邮箱开启了客户端登录服务,以163邮箱为例:

注意在发送邮件的配置中,填写的用户名是邮箱地址,密码是这里的授权码。其他邮箱如QQ、企业邮箱也是类似的配置,不懂的建议百度哦,不是很复杂的。

下面我们直接进入示例吧:


二、简单邮件发送

创建一个SpringBoot项目,引入如下依赖:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>

注:其他依赖按照自己的需求添加即可,如有问题可以参考示例项目。

填写配置信息:

server:
port: 8012
spring:
mail:
host: 'smtp.163.com'
username: 'xxx@163.com'
password: 'xxxx' # 授权码

编写测试接口:

@RestController
@RequestMapping(value = "email")
public class EmailAction { @Value("${spring.mail.username}")
private String sendName; private final JavaMailSender mailSender; // 也可以使用AutoWired public EmailAction(JavaMailSender mailSender) {
this.mailSender = mailSender;
} @PostMapping(value = "simple")
public String sendSimpleMsg(String msg, String email) {
if (StringUtils.isEmpty(msg) || StringUtils.isEmpty(email)) {
return "请输入要发送消息和目标邮箱";
} try {
SimpleMailMessage mail = new SimpleMailMessage();
mail.setFrom(sendName);
mail.setTo(email);
mail.setSubject("这是一封简单邮件");
mail.setText(msg);
mailSender.send(mail);
return "发送成功";
} catch (Exception ex) {
ex.printStackTrace();
return "发送失败:" + ex.getMessage();
}
}
}

测试一下:


三、HTML发送

除了普通的文本格式邮件,邮件还可以是HTML格式的,这样就可以自定义丰富的样式啦!

发送HTML邮件也很简单,在发送邮件时指定内容为HTML即可:

@PostMapping(value = "html")
public String sendHtmlMsg(String msg, String email) {
if (StringUtils.isEmpty(msg) || StringUtils.isEmpty(email)) {
return "请输入要发送消息和目标邮箱";
}
try {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
messageHelper.setFrom(sendName);
messageHelper.setTo(email);
messageHelper.setSubject("HTML邮件");
String html = "<div><h1><a name=\"hello\"></a><span>Hello</span></h1><blockquote><p><span>this is a html email.</span></p></blockquote><p>&nbsp;</p><p><span>"
+ msg + "</span></p></div>";
messageHelper.setText(html, true);
mailSender.send(message);
return "发送成功";
} catch (MessagingException e) {
e.printStackTrace();
return "发送失败:" + e.getMessage();
}
}


四、含附件的邮件发送

有时候需要发送携带附件的邮件,比如投递简历,通常会携带一个PDF文件。

我们这里在resources下添加一个PDF文件,然后发送邮件时携带这个文件:

@PostMapping(value = "mime_with_file")
public String sendWithFile(String msg, String email) {
if (StringUtils.isEmpty(msg) || StringUtils.isEmpty(email)) {
return "请输入要发送消息和目标邮箱";
} try {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
messageHelper.setFrom(sendName);
messageHelper.setTo(email);
messageHelper.setSubject("一封包含附件的邮件");
messageHelper.setText(msg);
// 该文件位于resources目录下
// 文件路径不能直接写文件名,系统会报错找不到路径,而IDEA却能直接映射过去
// 文件路径可以写成相对路径src/main/resources/x.pdf,也可以用绝对路径:System.getProperty("user.dir") + "/src/main/resources/x.pdf"
File file = new File("src/main/resources/SpringBoot日志处理之Logback.pdf");
//File file = new File(System.getProperty("user.dir") + "/src/main/resources/SpringBoot日志处理之Logback.pdf");
System.out.println("文件是否存在:" + file.exists());
messageHelper.addAttachment(file.getName(), file);
mailSender.send(message);
return "发送成功";
} catch (MessagingException e) {
e.printStackTrace();
return "发送失败:" + e.getMessage();
}
}

测试一下:


五、HTML含图片发送

如果HTML邮件包含图片等静态资源怎么办呢?即将图片显示在邮件中,这样邮件接收者就不用下载附件才能看到图片内容了。而且邮件内容也更加丰富了。

这个功能也很简单,使用addInline即可,可以这样做:

@PostMapping(value = "html_with_img")
public String sendHtmlWithImg(String msg, String email) {
if (StringUtils.isEmpty(msg) || StringUtils.isEmpty(email)) {
return "请输入要发送消息和目标邮箱";
}
try {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
messageHelper.setFrom(sendName);
messageHelper.setTo(email);
messageHelper.setSubject("带静态资源图片的HTML邮件");
String html = "<div><h1><a name=\"hello\"></a><span>Hello</span></h1><blockquote><p><span>this is a html email.</span></p></blockquote><p>&nbsp;</p><p><span>"
+ msg + "</span></p><img src='cid:myImg' /></div>";
messageHelper.setText(html, true);
File file = new File("src/main/resources/wei.jpg");
messageHelper.addInline("myImg", file);
mailSender.send(message);
return "发送成功";
} catch (MessagingException e) {
e.printStackTrace();
return "发送失败:" + e.getMessage();
}
}


六、使用模板发送邮件

利用模板引擎,比如thymeleaf,还可以通过模板文件来发送邮件:

首先引入spring-boot-starter-thymeleaf依赖:

        <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

在resources下新建一个templates文件夹,下面创建一个EmailTemplate.html文件:

<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8" />
<title>邮件模板</title>
</head> <body>
Hello, this is your msg: <span th:text="${msg}"></span>
</body>
</html>
@Autowired
private TemplateEngine templateEngine; @PostMapping(value = "html_with_template")
public String sendHtmlByTemplate(String msg, String email) {
if (StringUtils.isEmpty(msg) || StringUtils.isEmpty(email)) {
return "请输入要发送消息和目标邮箱";
} try {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
messageHelper.setFrom(sendName);
messageHelper.setTo(email);
messageHelper.setSubject("使用HTML模板文件发送邮件"); Context context = new Context();
context.setVariable("msg", msg);
messageHelper.setText(templateEngine.process("EmailTemplate", context), true);
mailSender.send(message);
return "发送成功";
} catch (MessagingException e) {
e.printStackTrace();
return "发送失败:" + e.getMessage();
}
}

参考:https://mrbird.cc/Spring-Boot-Email.html

SpringBoot整合邮件发送的更多相关文章

  1. springboot整合邮件发送(163邮箱发送为例)

    先登录163邮箱获取授权  勾选后安装提示会叫你设置授权密码之类的:记住授权的密码 1.引入maven依赖 <dependency> <groupId>org.springfr ...

  2. Springboot】Springboot整合邮件服务(HTML/附件/模板-QQ、网易)

    介绍 邮件服务是常用的服务之一,作用很多,对外可以给用户发送活动.营销广告等:对内可以发送系统监控报告与告警. 本文将介绍Springboot如何整合邮件服务,并给出不同邮件服务商的整合配置. 如图所 ...

  3. springboot添加邮件发送及压缩功能

    springboot添加邮件发送及文件压缩功能 转载请注明出处:https://www.cnblogs.com/funnyzpc/p/9190233.html 先来一段诗 ``` 就这样吧 忍受折磨 ...

  4. SpringBoot集成邮件发送

    一:简述 在日常中的工作中难免会遇到程序集成邮件发送功能.接收功能:此篇文章我将使用SpringBoot集成邮件发送功能和接收功能:若对邮件一些基本协议和发送流程不懂的请务必参考我之前写的博客或者浏览 ...

  5. SpringBoot 整合Mail发送功能问题与解决

    SpringBootLean 是对springboot学习与研究项目,是根据实际项目的形式对进行配置与处理,欢迎star与fork. [oschina 地址] http://git.oschina.n ...

  6. 补习系列(12)-springboot 与邮件发送

    目录 一.邮件协议 关于数据传输 二.SpringBoot 与邮件 A. 添加依赖 B. 配置文件 C. 发送文本邮件 D.发送附件 E. 发送Html邮件 三.CID与图片 参考文档 一.邮件协议 ...

  7. Spring Boot整合邮件发送

    概述 Spring Boot下面整合了邮件服务器,使用Spring Boot能够轻松实现邮件发送:整理下最近使用Spring Boot发送邮件和注意事项: Maven包依赖 <dependenc ...

  8. springboot系列九,springboot整合邮件服务、整合定时任务调度

    一.整合邮件服务 如果要进行邮件的整合处理,那么你一定需要有一个邮件服务器,实际上 java 本身提供有一套 JavaMail 组件以实现邮件服务器的搭建,但是这个搭建的服务器意义不大,因为你现在搭建 ...

  9. springboot实现邮件发送

    1.创建springboot项目. 2.创建好的项目如图: 在static目录下新建index.html. 3.点击启动项目 在浏览器的地址栏中访问:http://localhost:8080/ 访问 ...

随机推荐

  1. 二、安装JDK - Java软件的安装

    jdk是 Java 语言的软件开发工具包,主要用于移动设备.嵌入式设备上的java应用程序. 1.安装包的下载:http://pan.baidu.com/s/1mgh58ve (该安装包是绿色的,解压 ...

  2. 从BIO到Netty的演变

    从BIO到Netty的演变 前言 计算机网络可以说是每个学计算机的都绕不过去的一道坎.计算机网络到底有多么重要,你走到大学图书馆的计算机部分,翻开那些什么<从零开始:黑客XXX>,< ...

  3. canvas与工作流的不解之缘

    html的标签 <canvas>用于图形的绘制,通过脚本 (通常是JavaScript)来完成,canvas简而言之就是个画布.上一篇文章我们提到工作流的一个重要组成部分:流程建模,也就是 ...

  4. 读《MySQL必知必会》我学到了什么?

    前言 最近在写项目的时候发现自己的SQL基本功有些薄弱,遂上知乎查询MYSQL关键字,期望得到某些高赞答案的指点,于是乎发现了 https://www.zhihu.com/question/34840 ...

  5. IDEA中WEB项目本地调试和发布的配置分开配置

    一个Web项目,开发的时候设置了一些本地内容,比如IP地址,还有本地目录等.开发完成后,要发布到服务器上时,这些本地相关的配置,就需要配置成服务器上IP或目录. 原先的做法就是部署打包的时候,把相关的 ...

  6. PHP 在Swoole中使用双IoC容器实现无污染的依赖注入

    简介: 容器(container)技术(可以理解为全局的工厂方法), 已经是现代项目的标配. 基于容器, 可以进一步实现控制反转, 依赖注入. Laravel 的巨大成功就是构建在它非常强大的IoC容 ...

  7. nyoj 125-盗梦空间 (数学ans += temp * 60 * pow(0.05, cnt))

    125-盗梦空间 内存限制:64MB 时间限制:3000ms 特判: No 通过数:8 提交数:10 难度:2 题目描述: <盗梦空间>是一部精彩的影片,在这部电影里,Cobb等人可以进入 ...

  8. Python3.7.1(四) Print如何在输出中插入变量

    # 如果想在打印的字符串中的任意地方加入任意的变量,可以使用python的格式化输出.## 用例代码如下:s = 'Hello'x = len(s)print("The length of ...

  9. 反汇编分析NSString,你印象中的NSString是这样吗

    我们先来定义三个NSString -(void) testNSString { NSString* a = @"abc"; NSString* b = [NSString stri ...

  10. Fragment的生命周期(与Activity的对比)

    Fragment必须是依存与Activity而存在的,因此Activity的生命周期会直接影响到Fragment的生命周期.官网这张图很好的说明了两者生命周期的关系: 可以看到Fragment比Act ...