SpringBoot学习历程(十一):SpringBoot2.X集成mail发送邮件

  • 前言
  • 1. 引入依赖
  • 2. 设置邮件配置信息
  • 3. 发送邮件
    • 3.1 发送普通文本邮件
    • 3.2 发送HTML格式内容的邮件
    • 3.3 发送带附件的邮件
    • 3.4 发送带静态资源的邮件
    • 3.5 使用模板发送邮件
  • 4. 启动服务验证

前言

  • 本人github仓库地址:https://github.com/RabbitsInTheGrass/springBoot-Learning
  • 暂时使用的是Spring提供的org.springframework.mail.javamail.JavaMailSender发送邮件。

1. 引入依赖

<!--引入邮件依赖-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!--引入Thymeleaf依赖-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

2. 设置邮件配置信息

spring:#发送邮件设置mail:host: smtp.163.comusername: xxxxxx@163.com#对l63邮箱,password是授权码password: xxxxxxproperties:mail:smtp:auth: truestarttls:enable: truerequired: true

注意:如果发送方用的是163邮箱,password对应的是邮箱的授权码,而不是你的邮箱密码。

3. 发送邮件

3.1 发送普通文本邮件

EmailController .java

package com.rabbits.learn.controller;import com.rabbits.learn.util.JmsUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.thymeleaf.context.Context;import java.io.File;/*** @Description: 发送邮件类* @Author: RabbitsInTheGrass_xj* @Date: 2019/10/2 09:39*/
@RestController
@RequestMapping("/email")
public class EmailController {@Autowiredprivate JmsUtil jmsUtil;/*** 发送简单的邮件** @return 发送结果*/@RequestMapping("sendSimpleEmail")public String sendSimpleEmail() {SimpleMailMessage message = new SimpleMailMessage();// 接收地址message.setTo("2398937985@qq.com");// 标题message.setSubject("一封简单的邮件");// 内容message.setText("使用Spring Boot发送简单邮件。");return jmsUtil.sendSimpleEmail(message);}}

JmsUtil .java

package com.rabbits.learn.util;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.Component;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;import javax.mail.internet.MimeMessage;/*** @Description: 发送邮件工具类* @Author: RabbitsInTheGrass_xj* @Date: 2019/10/2 09:45*/
@Component
public class JmsUtil {private static final Logger logger = LoggerFactory.getLogger(JmsUtil.class);@Autowiredprivate JavaMailSender jms;@Autowiredprivate TemplateEngine templateEngine;@Value("${spring.mail.username}")private String from;public String sendSimpleEmail(SimpleMailMessage message) {try {message.setFrom(from);jms.send(message);return "发送成功";} catch (Exception e) {logger.error(e.getMessage(), e);return "发送失败";}}
}

3.2 发送HTML格式内容的邮件

EmailController .java

    /*** 发送HTML格式内容的邮件* @return 发送结果*/@RequestMapping("sendHtmlEmail")public String sendHtmlEmail() {// 接收地址String toAddress = "xxxxxxx@qq.com";// 标题String subject = "一封HTML格式内容的邮件";// 带HTML格式的内容StringBuilder sb = new StringBuilder("<p style='color:#42b983'>我要发送一份HTML格式内容的邮件。</p>");return jmsUtil.sendHtmlEmail(toAddress,subject,sb.toString());}

JmsUtil .java

    public String sendHtmlEmail(String toAddress, String subject, String text) {try {MimeMessage message = jms.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(message, true);helper.setFrom(from);helper.setTo(toAddress);helper.setSubject(subject);//true表示发送HTML格式邮件helper.setText(text, true);jms.send(message);return "发送成功";} catch (Exception e) {logger.error(e.getMessage(), e);return "发送失败";}}

3.3 发送带附件的邮件

EmailController .java

    /***发送带附件的邮件* @return 发送结果*/@RequestMapping("sendAttachmentsMail")public String sendAttachmentsMail() {// 接收地址String toAddress = "xxxxx@qq.com";// 标题String subject = "一封带附件的邮件";// 内容String text = "详情参见附件内容!";// 传入附件FileSystemResource file = new FileSystemResource(new File("src/main/resources/static/file/xxxx.doc"));return jmsUtil.sendAttachmentsMail(toAddress,subject,text,file);}

JmsUtil .java

    public String sendAttachmentsMail(String toAddress, String subject, String text, FileSystemResource file) {try {MimeMessage message = jms.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(message, true);helper.setFrom(from);helper.setTo(toAddress);helper.setSubject(subject);helper.setText(text);helper.addAttachment(file.getFilename(), file);jms.send(message);return "发送成功";} catch (Exception e) {logger.error(e.getMessage(), e);return "发送失败";}}

3.4 发送带静态资源的邮件

EmailController .java

    /*** 发送带静态资源的邮件* @return 发送结果*/@RequestMapping("sendInlineMail")public String sendInlineMail() {// 接收地址String toAddress = "xxxxxxx@qq.com";// 标题String subject = "一封带静态资源的邮件";String contentId = "img";// 内容String text = "<html><body>一份美图:<img src='cid:" + contentId + "'/></body></html>";// 传入附件FileSystemResource file = new FileSystemResource(new File("src/main/resources/static/img/yourName.jpg"));return jmsUtil.sendInlineMail(toAddress,subject,text,file,contentId);}

JmsUtil .java

    public String sendInlineMail(String toAddress, String subject, String text, FileSystemResource file, String contentId) {MimeMessage message;try {message = jms.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(message, true);helper.setFrom(from);helper.setTo(toAddress);helper.setSubject(subject);helper.setText(text,true);//contentId 必须与图片标签里cid后的名称相对应,例如:imghelper.addInline(contentId, file);jms.send(message);return "发送成功";} catch (Exception e) {logger.error(e.getMessage(), e);return "发送失败";}}

3.5 使用模板发送邮件

在发送验证码等情况下可以创建一个邮件的模板,唯一的变量为验证码。这个例子中使用的模板解析引擎为Thymeleaf,所以必须引入Thymeleaf依赖。

EmailController .java

    /*** 发送模板邮件** @param code 验证码* @return 发送结果*/@RequestMapping("sendTemplateEmail")public String sendTemplateEmail(String code) {//接收地址String toAddress = "xxxxx@qq.com";//标题String subject = "发送一份模板邮件";//邮件模板String templateName = "emailTemplate";Context context = new Context();context.setVariable("code", code);return jmsUtil.sendInlineMail(toAddress, subject, templateName, context);}

JmsUtil .java

    public String sendInlineMail(String toAddress, String subject, String templateName, Context context) {try {MimeMessage message = jms.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(message, true);helper.setFrom(from);// 接收地址helper.setTo(toAddress);// 标题helper.setSubject(subject);// 处理邮件模板String template = templateEngine.process(templateName, context);helper.setText(template, true);jms.send(message);return "发送成功";} catch (Exception e) {logger.error(e.getMessage(), e);return "发送失败";}}

emailTemplate.html

<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8" /><title>验证码邮件模板</title>
</head>
<body>
您好,您的验证码为<span th:text="${code}"></span>,请在两分钟内使用完成操作。
</body>
</html>

4. 启动服务验证

启动服务后请求各个方法即可。

SpringBoot学习历程(十一):SpringBoot2.X集成mail发送邮件相关推荐

  1. springboot 实现机器学习_机器学习入门之SpringBoot学习历程

    本文主要向大家介绍了机器学习入门之SpringBoot学习历程,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助. 经过同事介绍,听说了SpringBoot框架,并且亲身感受过这个框架的优 ...

  2. SpringBoot学习历程

    新年新气象,更新了一下本人所有写的关于SpringBoot的文章目录,感谢大家长期以来的支持,在接下来的日子还会不定期的进行更新. 入门 使用IntelliJ Idea新建SpringBoot项目 S ...

  3. RabbitMQ学习笔记:springboot2 amqp集成生产者消费者

    1.引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>sp ...

  4. springboot学习(七十一)解决问题:the URL contained a potentially malicious String “;“

    访问某个请求报错: org.springframework.security.web.firewall.RequestRejectedException: The request was reject ...

  5. NRF52840学习历程(十一) 幻彩RGB灯WS2812多路(两路)输出

    时间在2021年2月6日,寒假放假在家好好学一学nRF52840 今天还在感冒,休息一波 开发板:初雪的100出头那块 NRF52840 EVAL KIT 下载工具:JINLK V11(最好是JLIN ...

  6. SpringBoot笔记:SpringBoot2.3集成SpringSession+nginx+redis实现session共享

    文章目录 Spring Session介绍 Redis集成 yml配置 依赖添加 redis存值查看 登录服务器查看redis的值 查询所有"spring:session:"开头的 ...

  7. 【Springboot学习】SpringBoot集成Shiro前后端分离使用redis做缓存【个人博客搭建】

    shiro-redis 目录 shiro-redis 下载 shiro-core/jedis 版本对比图 使用前 如何配置? 设置文件 Redis 独立 Redis哨兵 Redis 集群 Spring ...

  8. Java学习历程之----进阶篇(十一)

    千禧难题之二:      霍奇猜想:在非奇异复射影代数簇上, 任一霍奇类是代数闭链类的有理线性组合.它是关于非奇异复代数簇的代数拓扑和它由定义子簇的多项式方程所表述的几何的关联的猜想.由威廉·瓦伦斯· ...

  9. 目录:SpringBoot学习目录

    SpringBoot配套源码地址:gitee.com/hengboy/spr- SpringCloud配套源码地址:gitee.com/hengboy/spr- SpringBoot相关系列文章请访问 ...

最新文章

  1. [转]Docker基础-使用Dockerfile创建镜像
  2. html 屏蔽蓝色电话,html – 在Chrome扩展程序中停用文字字段蓝色突出显示?
  3. zen cart 操作-修改
  4. ECharts - 极坐标系下的堆叠柱状图
  5. CCF认证历年试题集
  6. 25岁房贷上万濒临失业,大专小哥转行软件测试“挽救”人生
  7. 【渝粤题库】陕西师范大学800005 人文地理学
  8. 远程 交换机 日志服务器,交换机怎么配置 日志发送日志服务器
  9. B05 - 008、什么是大数据
  10. 屏蔽csdn百度推广广告
  11. 【生产调度】基于遗传算法求解柔性生产调度(FJSP)问题含Matlab源码
  12. Mybatis日志源码探究
  13. Python—期末考试模拟训练题
  14. python中raise啥意思_python raise什么意思
  15. 人工智能帮助科学家预测地震
  16. peaZip V9.0 解压缩工具
  17. BSN-DDC基础网络详解(五):接入DDC网络(1)
  18. vscode配置总结可收藏/vscode用户设置大全/vue代码模板
  19. ppt的默认设置这么好用,往往被我们忽视
  20. oracle中游标分类,Oracle 游标分类以及实例

热门文章

  1. Pubwin EP 正式版完整安装全程-数据备份
  2. 在Vue中 用trun js + pdf-dist 实现pdf翻页效果
  3. 统计学三种相关系数【pearson、spearman、kendall】
  4. 一筐梨子amp;一筐水果——协变性(covariant)
  5. 【Python】解决使用 plt.savefig 保存图片时一片空白
  6. 2020.7.18 T3Ocd(jz暑假训练day4)
  7. 理工附中2021年高考成绩查询,2021年江苏理工学院录取结果查询,附查询网址入口...
  8. OpenSSL文档阅读笔记-RSA Encryption Decryption Example with OpenSSL in C
  9. 上传文件到OOS服务器
  10. PCB板上的字母代表哪些元器件?一文看全!