本文目录:

  • 1.前言
  • 2.Spring Boot配置步骤
    • Ⅰ.添加依赖
    • Ⅱ.修改配置文件
    • Ⅲ.POP3/SMTP服务
    • Ⅳ.封装邮件工具类
      • 1.定义接口IMailService.interface:
      • 2.实现类MailServiceimpl.java:
        • 2.1.简单文本邮件
        • 2.2 html邮件
        • 2.3 带附件的邮件
        • 2.4 带图片的邮件
        • 2.5 模板邮件
      • 3.controller调用
      • 4.测试结果
        • 4.1 简单邮件结果
        • 4.2 html邮件
        • 4.3 带附件邮件
        • 4.4 带图片邮件
        • 4.5 模板邮件
  • 3.结束语

1.前言

邮件发送这一功能在实际的项目中使用的是非常普遍的,用户忘记账户、忘记密码等很多操作都是通过邮件的方式来交互,因此邮件发送在 web 开发中是必不可少一个功能模块,本文就主要介绍如何在Spring boot中发送不同类型的邮件。

2.Spring Boot配置步骤

Spring 本身提供了很好用的org.springframework.mail.javamail.JavaMailSender接口来实现邮件发送功能。Spring boot中也为此提供了自动化配置,所以我们使用起来非常方便。

Ⅰ.添加依赖

首先在pom.xml文件中添加如下依赖:

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

Ⅱ.修改配置文件

添加依赖之后就需要在项目配置文件application.properties中配置发送邮件相关的参数,具体如下:

spring.mail.host=smtp.163.com
spring.mail.username=xxx
spring.mail.password=xxx
spring.mail.default-encoding=UTF-8
# 启动如果报错:530。则还需要配置一个SSL安全链接(eg:比如qq邮箱则需要ssl配置)
spring.mail.properties.mail.smtp.ssl.enable=true

重要的参数就这些,其它的使用默认的即可,以下为解释:

  • spring.mail.host:邮箱服务器地址,这个根据自己使用什么邮箱有区别,比如:

    • smtp.163.com:163邮箱
    • smtp.126.com:126邮箱
    • smtp.qq.com:qq邮箱
  • spring.mail.username:邮箱登陆用户名。
  • spring.mail.password:第三方登陆授权码(下面会具体介绍该授权码的获取方式)。
  • spring.mail.default-encoding:编码方式

Ⅲ.POP3/SMTP服务

上面提到了授权码的概念,首先要明确一个概念就是授权码跟我们直接登陆邮箱的密码不是一样的,授权码可以理解为第三方客户端登陆邮箱的密码,要想获取授权码需要我们去自己所用邮箱的官网设置开启POP3/SMTP以及IMAP/SMTP服务,我这里就以自己使用的163账号为例介绍打开该服务以及获取授权码的步骤,如图:

       登陆163邮箱官网,按照图示步骤进行操作,在选择了服务之后会给你发送验证码,输入验证码之后就会让你自己设置授权码,这里的授权码就是上边配置文件中spring.mail.password需要填写的值。

提示: qq邮箱设置:登录邮箱,然后在设置---->账户---->POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务----> 生成授权码执行一系列操作即可(如果发送失败的话,建议以上开启那些服务)。

Ⅳ.封装邮件工具类

对邮件的操作最好是封装一个类以便代码重用以及维护,我这里封装成一个service层。

1.定义接口IMailService.interface:

package com.web.springbootmail.service;
/**
* @author Promise
* @createTime 2019年3月30日 下午3:14:14
* @description
*/
public interface IMailService {/*** 简单文本邮件* @param toUser 邮件接收者*/void simpleMil(String toUser)throws Exception;/*** html邮件* @param toUser 邮件接收者*/void htmlMail(String toUser) throws Exception;/*** 带附件邮件* @param toUser 邮件接收者*/void attachmentMail(String toUser)throws Exception;/*** 带图片邮件* @param toUser 邮件接收者*/void imgMail(String toUser)throws Exception;/*** 模板邮件* @param toUser 邮件接收者*/void TemplateMail(String toUser)throws Exception;}

2.实现类MailServiceimpl.java:

package com.web.springbootmail.service.impl;import java.io.File;import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;import com.web.springbootmail.service.IMailService;/**
* @author Promise
* @createTime 2019年3月30日 下午3:14:37
* @description  邮件发送服务类
*/
@Service("mailService")
public class MailServiceImpl implements IMailService{@Autowiredprivate JavaMailSender jms;@Autowiredprivate TemplateEngine templateEngine;@Value("${spring.mail.username}")private String from;@Overridepublic void simpleMil(String toUser) {}@Overridepublic void htmlMail(String toUser) {// TODO Auto-generated method stub}@Overridepublic void attachmentMail(String toUser) {// TODO Auto-generated method stub}@Overridepublic void imgMail(String toUser) {// TODO Auto-generated method stub}@Overridepublic void TemplateMail(String toUser) {// TODO Auto-generated method stub}
}

这里只给出了框架,具体实现下面依次介绍,上面还注入了三个变量:

  • jms:邮件发送接口
  • templateEngine:发送模板邮件时解析模板
  • from:读取配置文件中配置的邮件发送者的账号

下面介绍每一种邮件的具体实现:

2.1.简单文本邮件

这一类邮件最简单,使用SimpleMailMessage对象,代码如下:

@Override
public void simpleMil(String toUser) {// TODO Auto-generated method stub//初始化简单邮件对象SimpleMailMessage message = new SimpleMailMessage();//邮件发送者message.setFrom(from);//邮件接收者message.setTo(toUser);//邮件标题message.setSubject("简单邮件");//邮件内容message.setText("简单内容");//发送邮件jms.send(message);
}
2.2 html邮件

这一类邮件使用的是MimeMessage对象,可丰富页面样式,代码如下:

@Override
public void htmlMail(String toUser) throws MessagingException {// TODO Auto-generated method stubMimeMessage message = jms.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(message, true);helper.setFrom(from);helper.setTo(toUser);helper.setSubject("html格式邮件");//内容为html格式String content = "<p style='color:yellow;'>这是一封html格式的文件</p><h1>这是一封html格式的文件</h1>";//true表示以html格式发送邮件helper.setText(content, true);jms.send(message);
}
2.3 带附件的邮件

这一类邮件多了添加附件的过程,也使用MimeMessage对象,代码如下:

@Override
public void attachmentMail(String toUser) throws MessagingException {// TODO Auto-generated method stubMimeMessage message = jms.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(message, true);helper.setFrom(from);helper.setTo(toUser);helper.setSubject("带附件邮件");//加载绝对路径资源FileSystemResource fs = new FileSystemResource(new File("D:\\DownLoad\\file\\阿里巴巴Java开发手册v1.2.0.pdf"));helper.setText("这是一封带附件的邮件!");//添加附件资源helper.addAttachment("阿里巴巴Java开发手册v1.2.0.pdf", fs);helper.addAttachment("高清图片.jpg", new File("C:\Users\a\Desktop\Docker基础命令.png"));jms.send(message);
}
2.4 带图片的邮件

这一类邮件多了添加图片的过程,也使用MimeMessage对象,代码如下:

@Override
public void imgMail(String toUser) throws MessagingException {// TODO Auto-generated method stubMimeMessage message = jms.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(message, true);helper.setFrom(from);helper.setTo(toUser);helper.setSubject("带图片邮件");//设置资源的cidString content = "<html><body>博客头像<img src='cid:img'/></body></html>";helper.setText(content, true);FileSystemResource fs = new FileSystemResource(new File("D:\\DownLoad\\img\\20171123181522_c48800.jpg"));//和上边的cid要对应helper.addInline("img", fs);jms.send(message);
}

其实这种方式也是html邮件,只是多了静态资源,比如我们这里就在页面上添加了一张图片,步骤跟添加附件有点类似,但是需要注意的是静态资源需要给静态资源设置cid,以便存在多个静态资源区分。

2.5 模板邮件

模板邮件指的是邮件的主体内容都是一样的,只是有一部分不一样,这样我们就可以定义一个邮件的模板,发送邮件的时候我们直接传入参数就可以了,是一种很好的封装。

这里我使用的模板解析框架为 thymeleaf,所以需要先在项目pom.xml文件中添加 Thymeleaf 依赖:

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

接下来在src/main/resources/templates目录下新建MailTemplate.html文件,内容如下:

<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8"/>
<title>Insert title here</title>
</head>
<body><h2>您好,<span th:text="${username}"></span>:这是来自测试的邮件模板!</h2>
</body>
</html>

使用具体代码如下:

@Override
public void TemplateMail(String toUser) throws MessagingException {// TODO Auto-generated method stubMimeMessage message = jms.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(message, true);helper.setFrom(from);helper.setTo(toUser);helper.setSubject("模板邮件");Context context = new Context();//给模板传入参数,username要与模板中变量名一致,promise为测试数据context.setVariable("username", "追梦者");//thymeleaf模板默认会从src/main/resources/tempaltes目录下寻找文件,填入我们定义的模板名,不需要写后缀。String template = templateEngine.process("MailTemplate", context);helper.setText(template, true);jms.send(message);
}

3.controller调用

封装好了发送邮件的工具类之后,我们直接在controller调用即可,代码如下:

package com.web.springbootmail.controller;import java.util.HashMap;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.web.springbootmail.service.IMailService;/**
* @author Promise
* @createTime 2019年4月1日 下午9:30:38
* @description  邮件发送
*/
@RequestMapping("/mail")
@RestController
public class EmailController {@Autowiredprivate IMailService mailService;@GetMapping("/simple")public Map<String, Object> sendSimpleMail() {Map<String, Object> map =new HashMap<>();try {//参数就是接收邮件的邮箱,根据自己实际填写mailService.simpleMil("*****@qq.com");map.put("res", "success");} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();map.put("res", "error");}return map;}@GetMapping("/htmlMail")public Map<String, Object> htmlMail(){Map<String, Object> map =new HashMap<>();try {mailService.htmlMail("*****@qq.com");map.put("res", "success");} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();map.put("res", "error");}return map;}@GetMapping("/attachmentsMail")public Map<String, Object> attachmentsMail(){Map<String, Object> map =new HashMap<>();try {mailService.attachmentMail("*****@qq.com");map.put("res", "success");} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();map.put("res", "error");}return map;}@GetMapping("/imgMail")public Map<String, Object> imgMail(){Map<String, Object> map =new HashMap<>();try {mailService.imgMail("*****@qq.com");map.put("res", "success");} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();map.put("res", "error");}return map;}@GetMapping("/templateMail")public Map<String, Object> templateMail(){Map<String, Object> map =new HashMap<>();try {mailService.TemplateMail("*****@qq.com");map.put("res", "success");} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();map.put("res", "error");}return map;}
}

4.测试结果

4.1 简单邮件结果

启动项目,访问localhost:8080/mail/simple,此时我的收件箱收到如下邮件:

4.2 html邮件

访问localhost:8080/mail/htmlMail,效果如下:

4.3 带附件邮件

访问localhost:8080/mail/attachmentsMail,效果如下:

4.4 带图片邮件

访问localhost:8080/mail/imgMail,效果如下:

4.5 模板邮件

访问localhost:8080/mail/templateMail,效果如下:

3.结束语

好了,关于Spring boot配置邮件发送功能就到这里了,感谢阅读,bye~


博主这篇文章写得挺全面的,故转载过来留作学习。

如果本文对你有所帮助,那就给我点个赞呗

End

Spring Boot 配置邮件发送相关推荐

  1. Spring Boot 发邮件和附件,超实用!

    Spring Boot集成邮件服务竟如此简单,快速掌握邮件业务类的核心逻辑和企业邮件的日常服务. 什么是SMTP? SMTP全称为Simple Mail Transfer Protocol(简单邮件传 ...

  2. Spring Boot配置log4j记录日志

    转载请注明出处:Spring Boot配置log4j记录日志 我们在老的项目框架ssh,springMVC中都使用过log4j日志模块. 例如:java日志功能log4j模块的使用方法 Spring ...

  3. spring boot配置详情

    spring boot配置详情如下:  1.MVC相关  mvc  spring.mvc.async.request-timeout设定async请求的超时时间,以毫秒为单位,如果没有设置的话,以具体 ...

  4. Spring Boot配置Tomcat容器、Jetty容器、Undertow容器

    Spring Boot配置Tomcat容器.Jetty容器.Undertow容器 Tomcat.Jetty.Undertow Tomcat概述 Jetty概述 Undertow概述 Spring Bo ...

  5. 详解HTTPS通信流程,使用JDK,openssl,XCA进行证书认证详细操作,Spring Boot配置SSL证书实操

    这里写目录标题 HTTPS SSL 通信流程 HTTPS一般使用的加密与HASH算法如下: 1.JDK JDK中自带keytool工具便携生成SSL证书,其代码参数如下 整合到spring boot项 ...

  6. 基于spring boot的邮件微服务消息中间件设计与实现 毕业论文+系统功能图v1.0.vsdx+项目源码

    下载地址:https://download.csdn.net/download/m0_63680064/36065411 项目介绍: 基于spring boot的邮件微服务消息中间件设计与实现 毕业论 ...

  7. Spring Boot 配置元数据指南

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者 | 遗失的拂晓 来源 | 公众号「锅外的大佬」 1. 概览 在编写 Spring Bo ...

  8. java多个数据库数据进行访问_通过Spring Boot配置动态数据源访问多个数据库的实现代码...

    之前写过一篇博客<Spring+Mybatis+Mysql搭建分布式数据库访问框架>描述如何通过Spring+Mybatis配置动态数据源访问多个数据库.但是之前的方案有一些限制(原博客中 ...

  9. Spring Boot 配置随机数那些小技巧

    转载自  Spring Boot 配置随机数那些小技巧 Spring Boot支持在系统加载的时候配置随机数. 添加config/random.properties文件,添加以下内容: #随机32位M ...

最新文章

  1. ICCV 2021 | R-MSFM: 用于单目深度估计的循环多尺度特征调制
  2. webstrom常用键
  3. hr2000 光谱Matlab,HR4000 HR2000 HR2000+ 光纤光谱仪 CG HC-1光栅 消除高阶衍射滤光片-广州标旗...
  4. 13、HTML <meta>标签
  5. oracle 用户创建角色,oracle普通用户创建和加权限
  6. python2与python3共存_【python】--python2与python3 共存
  7. 喇叭正反相位测试音频_FIR滤波器能给音频扩声带来怎样的帮助?
  8. php curl无视ssl,用Curl实现Post和Get请求,可绕过SSL验证
  9. win7设置html,Windows7怎么设置默认浏览器?
  10. 2.写给设计师看的HTMLCSS入门指导
  11. 打包图片上传cdn_Media Buy之Landing Page的资源文件CDN部署方案
  12. python迭代计算pi_python使用三角迭代计算圆周率PI的方法
  13. Dubbo 源码解析 —— Directory
  14. 离散数学及其应用(第七版黑书)笔记
  15. 《数据资产管理实践白皮书3.0》发布!(附全文下载)
  16. 使用Git上传项目到Gitgub
  17. 如何快速复制文件或文件夹路径?
  18. C#语言实例源码系列-实现动态图标闪烁显示
  19. Comet OJ - 2019国庆欢乐赛 D1 入学考试 (简单版)
  20. 处理器与大力神杯,夺冠或许并不需要11人

热门文章

  1. 对qq2007版本登录过程的协议分析
  2. 国内单基站查询 api数据接口
  3. impdp导入dmp文件_DMP文件导入过程中报错
  4. 让我们,从头到尾,通透网络I/O模型
  5. TDengine Taos数据库同步服务
  6. 解决Python代码编码问题 SyntaxError: Non-UTF-8 code starting with '\xc1'
  7. [转]勒贝格积分的框架与通俗理解
  8. 重新定义容器化 Serverless 应用的数据访问
  9. Float.parseFloat()的作用
  10. cocos2dx-4.文本