springboot发送邮件_SpringBoot发送邮件如何实现,SpringBoot发送邮件详解(附代码)...
在很多的项目开发中,总会遇到消息通知的场景,比如某个广告主提交一个表单,我们要通知提醒运营人员及时查看。
消息通知的形式也有很多,比如:短信、邮件、app推送等,本文主要给大家描述一下邮件通知的形式,因为邮件相比较其他通知渠道更方便实用(免费),除了简单文本邮件(已经满足大多数情形),本文还会重点说一下集成Thymeleaf模版引擎,使用HTML的形式发送邮件,尽管HTML内容不是标准化的消息格式,但是许多邮件客户端至少支持标记语言的子集,这种方式相比较纯文本展现形式更加友好。
准备
一个普通再也普通不了的SpringBoot项目
简单文本发送
还是那句老话,在SpringBoot看来一切都是这么便捷。它已经集成邮件发送所必需的库模块,我们只需将以下依赖添加到pom.xml
即可。
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-mail -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId>
</dependency>
邮箱服务结构
Spring框架中用于Java邮件支持的接口和类组织如下:
- MailSender interface:发送简单基础电子邮件的顶级接口;
- JavaMailSender interface:是
MailSender
的子接口。它支持MIME消息,并且主要与MimeMessageHelper
类一起用于创建MimeMessage
。建议在此接口实现类JavaMailSenderImpl
中使用MimeMessagePreparator
机制; - JavaMailSenderImpl class:实现了
JavaMailSender
的接口,它支持MimeMessage
和SimpleMailMessage
; - SimpleMailMessage class:用于创建简单的邮件消息,包括from,to,cc,subject和text字段;
- MimeMessagePreparator interface:提供一个回调接口,用于编写MIME消息;
- MimeMessageHelper class:用于创建MIME消息的帮助类。它为HTML布局中的图像,典型邮件附件和文本内容提供支持。
在以下部分中,我将向大家展示如何使用这些接口和类:
配置文件
下面举例163邮箱(最常用的):
spring:mail:host: smtp.163.com # 发件服务器username: coderxm@163.com # 账号password: xxxx # 密码(163需要授权第三方登录密码,请查看设置-客户端授权码密码开通)port: 465protocol: smtpdefault-encoding: utf-8# 下面这些配置大家不用深究,主要用于配置sslproperties:mail:imap:ssl:socketFactory:fallback: falsesmtp:auth: truessl:enable: truesocketFactory:class: com.fintech.modules.base.util.mail.MailSSLSocketFactorystarttls:enable: truerequired: truetest-connection: false
代码
service层
按照常见的代码结构,我们先定义一个发送邮件的接口,负责创建和发送新的邮件消息。
public interface EmailService {/*** 发送简单文本内容* @param to 发件人* @param subject 主题* @param text 内容*/void sendSimpleMessage(String to,String subject,String text);
}
我们可以将一些常用的配置添加到yml配置文件当中
# 邮件配置
xiaoming:email:subject: "程序员小明"from: "coderxm@163.com"to: "xiaohong@163.com"# 抄送人:类型定义为数组,可以配置多个cc:- "xiaogang@163.com"
然后再通过注解注入到一个实体类中,这样很优雅,随用随取:
@Configuration
@ConfigurationProperties(prefix = "xiaoming.email")
@Data
public class EmailConfig {private String subject;private String from;private String to;private String[] cc;
}
我们再定义一个类去实现这个接口:
@Slf4j
@Service
public class EmailServiceImpl implements EmailService {@Autowiredpublic JavaMailSender emailSender;@Autowiredprivate EmailConfig emailConfig;@Overridepublic void sendSimpleMessage(String to, String subject, String text) {try {SimpleMailMessage message = new SimpleMailMessage();message.setTo(to);message.setFrom("coderxm@163.com");message.setSubject(subject);message.setText(text);emailSender.send(message);} catch (MailException exception) {log.error(ExceptionUtil.stacktraceToString(exception));}}
}
测试
我们做一个简单的测试:简单的邮件是否能够发送成功。
@RunWith(SpringRunner.class)
@SpringBootTest
public class EmailTest {@Autowiredprivate EmailService emailService;@Testpublic void testSimple(){emailService.sendSimpleMessage("ligang@163.com","XX篮球","你好,我想让周琦代言!");}
}
使用html作为模版发送邮件
正在洋洋得意(准备划水)的时候,我们的产品突然对我说,“用简单的文本发送邮件也太简陋了吧,显示不出来我们的产品档次”,然后给我了一个样式,让我以这种形式发送,好啊,什么都难不倒小明。我连忙找到我们的前端,(假装低三下四地)让她帮忙排一个页面给我(这个工作我实在不想做,一是懒,二是人家前端肯定比我专业啊),为了保密,我简化一下,大概是这样的:
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head></head>
<body>姓 名:<span th:text="${userName}"></span>性 别:<span th:text="${gender}"></span>
</body>
</html>
其实样式很好看的,但是这都不是重点,我们就以此作为模版举个例子,语法使用的都是thymeleaf,在此处就不再赘述,如果有想了解的可以去官网找。
增加Thymeleaf dependency
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
service层
创建另一个服务类,它主要通过读取html模版封装数据准备邮件内容,在我们之前的示例中,这是一个简单的文本消息。
@Service
public class MailContentBuilder {@Autowiredprivate TemplateEngine templateEngine;@Autowiredpublic MailContentBuilder(TemplateEngine templateEngine) {this.templateEngine = templateEngine;}public String build(Map<String, Object> message) {Context context = new Context();context.setVariables(message);return templateEngine.process("email", context);}
}
在EmailService
增加接口:
public interface EmailService {/*** 发送简单文本内容* @param to 发件人* @param subject 主题* @param text 内容*/void sendSimpleMessage(String to,String subject,String text);/*** 传递多个变量,用于动态更换页面模版内容* @param emailInfoMap*/void prepareAndSend(Map<String,Object> emailInfoMap);
}
在EmailServiceImpl
增加发送html形式邮件的实现方法:
@Override
public void prepareAndSend(Map<String,Object> emailInfoMap) {MimeMessagePreparator messagePreparator = mimeMessage -> {MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage);messageHelper.setFrom(emailConfig.getFrom());messageHelper.setTo(emailConfig.getTo());messageHelper.setCc(emailConfig.getCc());messageHelper.setSubject(emailConfig.getSubject());
// messageHelper.setText(message);String content = mailContentBuilder.build(info);messageHelper.setText(content,true);};try {emailSender.send(messagePreparator);} catch (MailException e) {// runtime exception; compiler will not force you to handle it}
}
测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class EmailTest {@Autowiredprivate EmailService emailService;@Testpublic void testHtml(){HashMap<String, Object> map = new HashMap<>();map.put("userName","程序员小明");map.put("gender","男");emailService.prepareAndSend(map);}
}
整个Springboot发送邮件的场景已经复盘结束,大家如果有用到的速速体验吧!
------本文完结-------
感谢你的阅读,如果喜欢的话**评论、转发**一下再走吧!!!
以后会有更多精彩内容呈现欢迎**关注**!!!!
springboot发送邮件_SpringBoot发送邮件如何实现,SpringBoot发送邮件详解(附代码)...相关推荐
- SpringBoot—整合log4j2入门和log4j2.xml配置详解
关注微信公众号:CodingTechWork,一起学习进步. 引言 对于一个线上程序或者服务而言,重要的是要有日志输出,这样才能方便运维.而日志的输出需要有一定的规划,如日志命名.日志大小,日志分 ...
- springboot集成logback日志 通用logback.xml模板详解
先看Spring Boot中依赖的logback,log4j,slf4j相关Jar包 1.最简单的默认打印控制台日志 import org.slf4j.Logger; import org.slf4 ...
- Spring 和 SpringBoot 最核心的 3 大区别,详解!
作者:乐傻驴 uee.me/cNDC8 概述 对于 Spring和 SpringBoot到底有什么区别,我听到了很多答案,刚开始迈入学习 SpringBoot的我当时也是一头雾水,随着经验的积累.我慢 ...
- springboot 获取登录浏览器_java项目部署到linux服务器,微信小程序后台springboot项目部署到云服务器(图文详解)...
前面给大家讲了一个点餐系统的开发,包括java点餐后台和微信点餐小程序.可是都是教大家如何在本地把项目跑起来.今天就来教大家如何把这个点餐系统部署到服务器,实现商用. 传送门 点餐系统的开发,java ...
- 企业级 SpringBoot 教程 (二)Spring Boot配置文件详解
springboot采纳了建立生产就绪Spring应用程序的观点. Spring Boot优先于配置的惯例,旨在让您尽快启动和运行.在一般情况下,我们不需要做太多的配置就能够让spring boot正 ...
- 掌财社:Springboot如何添加支付接口?实例过程详解
在Springboot项目中,总是需要与支付宝.微信等等对接支付接口,那么问题来了,在Springboot中该如何实现支付接口对接呢?下面文章将以支付宝为例,演示一下Springboot对接支付接口的 ...
- springboot使用华为OBS上传下载文件详解
文章目录 一.华为云OBS的基本操作 1.华为云账号注册登录 2.购买OBS对象 3. 获取自身账户的访问密钥(ak,sk)(Springboot项目上传和下载需使用) 4.下载OBS Browser ...
- SpringBoot整合SpringSession以及自定义CookieSerializer和RedisSerializer详解
官方文档:https://docs.spring.io/spring-session/docs/2.2.6.RELEASE/reference/html5/#api-cookieserializer ...
- java sse spring_【SpringBoot WEB 系列】SSE 服务器发送事件详解
SSE 全称Server Sent Event,直译一下就是服务器发送事件,一般的项目开发中,用到的机会不多,可能很多小伙伴不太清楚这个东西,到底是干啥的,有啥用 本文主要知识点如下: SSE 扫盲, ...
- Spring Boot学习总结(8)——SpringBoot Common application properties(application.properties)详解
各种属性可以在您的application.properties/application.yml文件或命令行开关指定.下面提供了常见的Spring启动属性和引用它们的基础类的列表. # ======== ...
最新文章
- 信息科学部鼓励科学家更多瞄准“原创”研究
- 静态局部变量和全局变量的区别!
- Pytorch详解NLLLoss和CrossEntropyLoss、以及softmax和log_softmax
- Python中的相对文件路径的调用
- jsp ajax聊天室,jsp+servlet实战酷炫博客+聊天系统
- __gnu_cxx::hash_map使用中的一些问题
- Elegant Gnome Pack - 桌面环境
- 使用GDB进行调试 -- 1 应用场景
- apache netbeans ide为什么安装不了_Eclipse安装及常见的基于Eclipse的嵌入式集成开发环境...
- java抽象类可以new_java的抽象类,接口,普通类是否可以直接NEW,并且复写方法?
- 网吧操作系统制作和优化的经验
- cannot be cast to com.activiti.common.config.ICustomProcessDiagramGenerator
- SYN flooding
- C++学习(11)(综合题)
- 基于matlab的车牌定位算法设计与实现,原创】基于matlab的汽车牌照识别系统设计与实现...
- 决策树----对天气和自身状态是否适合去运动做出预测
- MATLAB设置图片输出的尺寸大小与字体(适用科研论文)
- 表白爱心HTML制作
- 感谢在俄勒冈州Develo的SAOs软件协会参加我的演讲“音乐背后的Web服务”的所有人...
- 多种详细讲解小程序页面传值