文章目录

  • 一.准备
  • 二.邮件发送需要的配置
    • 获取163邮箱授权码
    • 获取QQ邮箱授权码
    • YML配置
  • 三.代码编写
    • 普通邮件发送
    • HTML邮件发送
    • 含静态资源邮件发送
    • 带附件邮件发送

SpringBoot整合Email 邮件发送

在开发中,经常会碰到email邮件发送的场景 如发送验证码,向客户发送邮件等等。

今天,本项目将讲解通过Springboot 发送email 邮件 普通文本邮件 ,HTML内容板式邮件 ,包含静态资源邮件,以及带附件邮件。

一.准备

在创建SpringBoot项目 选择依赖时 发现其选择依赖时有邮件发送与Springboot整合的jar包,我们勾选即可

如果未勾选也不要紧,咱们手动导入

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

本项目是基于页面测试的,所以我又引入了相关web依赖 ,简化实体类代码引入了lombok依赖

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>

二.邮件发送需要的配置

因为各大邮件都有其对应安全系统,不是项目中想用就可以用的,我们必须要拿到其对应的客户端授权码才行,拿到授权码,在项目中配置SMTP服务协议以及主机 配置账户 ,就可以在项目中使用各大邮件运营商进行发送邮件了

获取客户端授权码过程

由于国内使用163邮箱以及qq邮箱较多 所以本文中仅仅展示这两个运营商获取客户端授权码的步骤

获取163邮箱授权码

登陆163邮箱
查看勾选服务是否开启,如未开启则勾选

因为我在做本项目是已经是开启了,所以这里是叫我重置客户端授权码了

在未设置授权码时 点击此页面回叫你使用当前邮箱账号绑定的手机号 发送一条短信确认
发送后,确认成功后,便可自定义163邮箱的客户端授权码了

·····

获取QQ邮箱授权码

登陆qq邮箱后,点击设置 选择 账户选项

向下拉选择开启POP3/SMTP 服务

点击开启也会进入验证 验证成功后即可看到自己qq邮箱的客户端授权码了


······

我们在拿到授权码后,就可以在我们Springboot工程中的配置文件 aplication.yml 或者properties文件中配置了

YML配置

spring:mail:#smtp服务主机  qq邮箱则为smtp.qq.comhost: smtp.163.com#服务协议protocol: smtp# 编码集default-encoding: UTF-8#发送邮件的账户username: xxxxxxx@163.com#授权码password: xxxxxxtest-connection: trueproperties:mail:smtp:auth: truestarttls:enable: truerequired: true

三.代码编写

下面开始Springboot项目中发送邮件的代码编写

其实也非常简单 ,Springboot已经给我们邮件发送进行了非常好的整合了,我们只需要注入邮件发送接口 调用其中的方法,就能轻松而愉悦的进行邮件发送了!

我们只需要在任意交由Spring管理的类(例如你的service层等)下注入以下接口即可

  @Autowiredprivate JavaMailSender mailSender;

由于每一封邮件都有固定的内容 例如 收件人信息 邮件内容 邮件标题 那么我们充分利用java面向对象的特性,我们吧邮件发送抽取为一个对象

代码采用了lombok进行简化

@Data
@NoArgsConstructor
@AllArgsConstructor
public class ToEmail implements Serializable {/*** 邮件接收方,可多人*/private String[] tos;/*** 邮件主题*/private String subject;/*** 邮件内容*/private String content;
}

肯定有人纳闷了,那么接收方有了,发送方呢?

发送一方,肯定就是我们自身拿到的授权码账号啊 ,我们获取账户客户端授权码其目的就是为了让代码代替我们自身邮箱 向其他邮箱发送信息而已。

获取发送方账户信息

  @Value("${spring.mail.username}")private String from;

统一说明: JsonReturn 为我项目自定义的Ajax 响应,结合 RestController 或者Responsebody向前端返回统一的JSON格式数据

普通邮件发送

public JsonReturn commonEmail(ToEmail toEmail) {//创建简单邮件消息SimpleMailMessage message = new SimpleMailMessage();//谁发的message.setFrom(from);//谁要接收message.setTo(toEmail.getTos());//邮件标题message.setSubject(toEmail.getSubject());//邮件内容message.setText(toEmail.getContent());try {mailSender.send(message);return JsonReturn.buildSuccess(toEmail.getTos(), "发送普通邮件成功");} catch (MailException e) {e.printStackTrace();return JsonReturn.buildFailure("普通邮件方失败");}



或许有人觉得 这样发送邮件 ,内容死板不好看啊,我想搞个有特色的的,搞个有样式的邮件,那么,下边就轮到HTML邮件出场了。

HTML邮件发送

  public JsonReturn htmlEmail(ToEmail toEmail) throws MessagingException {//创建一个MINE消息MimeMessage message = mailSender.createMimeMessage();MimeMessageHelper minehelper = new MimeMessageHelper(message, true);//谁发minehelper.setFrom(from);//谁要接收minehelper.setTo(toEmail.getTos());//邮件主题minehelper.setSubject(toEmail.getSubject());//邮件内容   true 表示带有附件或htmlminehelper.setText(toEmail.getContent(), true);try {mailSender.send(message);return JsonReturn.buildSuccess(toEmail.getTos() + toEmail.getContent(), "HTML邮件成功");} catch (MailException e) {e.printStackTrace();return JsonReturn.buildFailure("HTML邮件失败");}}

由于html格式不好编写,我直接使用Springboot测试类了

    @Testpublic void testHtml() throws Exception {String content = "<html>\n" +"<body>\n" +"    <h1>这是Html格式邮件!,不信你看邮件,我字体比一般字体还要大</h1>\n" +"</body>\n" +"</html>";toEmailService.htmlEmail(new ToEmail(new String[]{"248721866@qq.com"},"Html邮件",content));}


有的人还喜欢在邮件中添加一些图片,让图片作为邮件内容 ,,这也是可以的

含静态资源邮件发送

我这里只是列举了发送一张图片,如需发送多张,修改修改其中一点方法即可,代码注释的非常详细了

public JsonReturn staticEmail(ToEmail toEmail, MultipartFile multipartFile, String resId) {//创建一个MINE消息MimeMessage message = mailSender.createMimeMessage();try {MimeMessageHelper helper = new MimeMessageHelper(message, true);//谁发helper.setFrom(from);//谁接收helper.setTo(toEmail.getTos());//邮件主题helper.setSubject(toEmail.getSubject());//邮件内容   true 表示带有附件或html//邮件内容拼接String content ="<html><body><img width='250px' src=\'cid:" + resId + "\'>" + toEmail.getContent()+ "</body></html>";helper.setText(content, true);//蒋 multpartfile 转为fileFile multipartFileToFile = MultipartFileToFile(multipartFile);FileSystemResource res = new FileSystemResource(multipartFileToFile);//添加内联资源,一个id对应一个资源,最终通过id来找到该资源helper.addInline(resId, res);mailSender.send(message);return JsonReturn.buildSuccess(toEmail.getTos() + toEmail.getContent(), "嵌入静态资源的邮件已经发送");} catch (MessagingException e) {return JsonReturn.buildFailure("嵌入静态资源的邮件发送失败");}}

因为我当前没有使用文件服务器嘛,并未使用文件上传的URL 而是直接向接口传的multipartFile文件对象,但是邮件需要的是File对象,所以我们这里需要将multipartFile 转为 File

将 multpartfile 转为file

private File MultipartFileToFile(MultipartFile multiFile) {// 获取文件名String fileName = multiFile.getOriginalFilename();// 获取文件后缀String prefix = fileName.substring(fileName.lastIndexOf("."));// 若需要防止生成的临时文件重复,可以在文件名后添加随机码try {File file = File.createTempFile(fileName, prefix);multiFile.transferTo(file);return file;} catch (Exception e) {e.printStackTrace();}return null;}


注意还要传一个静态文件,我这里传一个图片,POSTMAN 传文件方法如下


发附件需要注意的是一个静态资源要对应一个ID ,ID没有讲究 别重复了就行

带附件邮件发送

很多时候,我们在发送邮件的时候,需要携带一些附件一起发送,那么JavaMailSender 中呢,也是有携带附件的方法的

    public JsonReturn enclosureEmail(ToEmail toEmail, MultipartFile multipartFile) {//创建一个MINE消息MimeMessage message = mailSender.createMimeMessage();try {MimeMessageHelper helper = new MimeMessageHelper(message, true);//谁发helper.setFrom(from);//谁接收helper.setTo(toEmail.getTos());//邮件主题helper.setSubject(toEmail.getSubject());//邮件内容   true 表示带有附件或htmlhelper.setText(toEmail.getContent(), true);File multipartFileToFile = MultipartFileToFile(multipartFile);FileSystemResource file = new FileSystemResource(multipartFileToFile);String filename = file.getFilename();//添加附件helper.addAttachment(filename, file);mailSender.send(message);return JsonReturn.buildSuccess(toEmail.getTos() + toEmail.getContent(), "附件邮件成功");} catch (MessagingException e) {e.printStackTrace();return JsonReturn.buildFailure("附件邮件发送失败" + e.getMessage());}}



ok,一套打完收工,本次SpringBoot 整合email 邮件发送到这里就完了,一般项目中的使用也基本够用了,哈哈。
项目源码:SpringBoot整合Email 邮件发送

SpringBoot整合Email 邮件发送相关推荐

  1. spring mail 发送html simple,SpringBoot整合Mail邮件发送

    Spring提供了非常好用的JavaMailSender接口实现邮件发送.在Spring Boot的Starter模块中也为此提供了自动化配置. 添加依赖 org.springframework.bo ...

  2. android javamail获取邮件太多太慢_java 实现 email 邮件发送最简单优雅的方式(网易 163 为例)

    如何使用IMAP服务? 首先介绍一些邮件发送的基础知识,如果你已经知道可以跳过. 直接到 Email 邮件发送实现的部分. IMAP是什么? IMAP,即Internet Message Access ...

  3. Bella Email邮件发送模板

    简介: Bella Email邮件发送模板是一款HTML5网站模板.aspku提示:本模板调用到谷歌字体库,可能会出现页面打开比较缓慢. 下载地址: http://www.bytepan.com/X3 ...

  4. SpringBoot集成163邮件发送详细配置,从163邮箱开始配置

    SpringBoot集成163邮件发送详细配置,从163邮箱开始配置 1.登录163邮箱 2.配置163邮箱 3.开始编写SpringBoot代码 1.创建SpringBoot项目然后引入依赖 2.编 ...

  5. SpringBoot +RabbitMQ实现邮件发送

    SpringBoot +RabbitMQ实现邮件发送 新建一个模块mail(与服务端分开来) 导入依赖 <!--rabbitmq 依赖--><dependency><gr ...

  6. Email邮件发送设置 工具开发整理(网易邮箱、Mailgun为例) 下篇

    Email邮件设置(网易邮箱.Mailgun)  下篇 说明:STMP服务邮件发送工具类,其中包括文本发送.html发送.附件发送. 1.maven pom 配置 <dependency> ...

  7. SpringBoot+jdk1.8邮件发送

    作用:找回密码发送验证信息 java框架:SpringBoot jdk版本:1.8 使用步骤: 1.下载jce_policy-8 这里我下载了放在了自己的网盘,可以直接下载使用 https://pan ...

  8. Email邮件发送设置 工具开发整理(网易邮箱、Mailgun为例) 上篇

    Email邮件设置   工具开发整理(网易邮箱.Mailgun为例) 上篇 说明:Email邮件 国内国外设置 以网易邮箱和Mailgun为例,并开发工具类. 一.国内 网易邮箱设置  1.设置STM ...

  9. Springboot快速实现邮件发送

    1.引入spring-boot-starter-mail依赖 <dependency><groupId>org.springframework.boot</groupId ...

最新文章

  1. java存款程序_JAVA实现账户取款和存款操作
  2. VMware的“桥接”、“NAT”、“Host-only”上网方式的区别
  3. 直播报名 | 小身材大能量!用英伟达智能小车Jetbot玩转深度学习
  4. Win Api 有名管道通信--扫雷辅助(四)
  5. L1-045. 宇宙无敌大招呼
  6. FE助手 json格式化 reslet client
  7. 中职升高职c语言程序设计教程课后答案,中职C语言教学创新与实践论文
  8. 《One-shot Voice Conversion by Separating Speaker and Content Representations with Instance Normaliz》
  9. 网络发现不了其他计算机,win10网络发现不了其他电脑怎么办_win10网络里找不到其他电脑如何处理...
  10. c++内存分区、创建变量开辟内存
  11. [附源码]java毕业设计动物保护网站
  12. Xposed 之旅 -- 让微信低版本也可以登录
  13. 链接:https://pan.baidu.com/s/1joRvLQ7nbti0Wp4t2CkX5w 提取码:ZMTD
  14. 基于c语言的哈希表电话簿
  15. 编写一个触发器:当修改一个学生专业的时候(转专业),则自动将本学期新专业同学全都选修的课程给该同学选修
  16. 怎样在PPT中抠图?这样操作30秒搞定!
  17. 平板电脑如何蓝牙和手机配对_如何将蓝牙设备与计算机,平板电脑或手机配对...
  18. MAC 开启与关闭SIP
  19. 【Struts2】一_idea快速搭建struts2框架
  20. 设置文本框 input [type=text] 的长度不超过固定值,输入的字符不超过固定值

热门文章

  1. 计算机可以辅助英语写作吗,计算机辅助大学英语写作
  2. dgl源码阅读笔记(3)——DeepWalk
  3. 计算机网络安全-----身份认证
  4. 梅科尔工作室-赵凌志-鸿蒙笔记4
  5. 由硫化铅/硒化物和碲化物(PbX:PbS,PbSe和PbTe)制成的QD钙钛矿量子点
  6. VR专业的面试题你都见过没?相信我绝对有用
  7. 亚太地区旅行限制放宽,香港、泰国、越南、韩国旅游消费明显增长,预计旺季将持续反弹 | 美通社头条...
  8. matplotlib学习—画等高线图
  9. 刘二大人 PyTorch深度学习实践 笔记 P6 逻辑斯蒂回归
  10. Lottie: 让动画实现更简单