Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SpringBoot开发案例之整合mail发送服务

SpringBoot开发案例之整合mail发送服务

原创
作者头像
小柒2012
修改于 2018-03-30 10:59:28
修改于 2018-03-30 10:59:28
1.7K2
举报
文章被收录于专栏:IT笔记IT笔记
spring-boot-mail.jpg
spring-boot-mail.jpg

记得上个月做过这样一篇笔记,微服务架构实践之邮件通知系统改造。

当时用的是开源的第三方插件mail和Thymeleaf做发送服务,显然这样子你需要配置一些东西,麻烦!!!接触了Spring Boot以后,显然有更好的解决方案,我们只需要引入spring-boot-starter-mail模块就实现了自动化配置。

好,废话不扯,言归正题(文中大部分是部分代码,详细代码见Git)。

开发环境

JDK1.7、Maven、Eclipse、SpringBoot1.5.2、spring-boot-starter-mail、spring-boot-starter-thymeleaf,spring-boot-starter-freemarker

项目结构

springboot-mail.png
springboot-mail.png

引入依赖

在工程中的pom.xml中引入以下依赖:

代码语言:txt
AI代码解释
复制
       <!-- email -->
        <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>
	    <!-- freemarker 模版 -->
		<dependency>
		    <groupId>org.springframework.boot</groupId>
		    <artifactId>spring-boot-starter-freemarker</artifactId>
		</dependency>

application.properties中配置以下内容:

代码语言:txt
AI代码解释
复制
spring.mail.host=smtp.qq.com
spring.mail.username=345849402@qq.com
#授权码g,在QQ邮箱客户端生成 修改成自己的  设置-账户-开启服务-获取授权码
spring.mail.password=XXXXXXX
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true

#freemarker
spring.freemarker.template-loader-path=classpath:/static/template/
spring.freemarker.enabled=true
spring.freemarker.cache=false
spring.freemarker.charset=UTF-8
spring.freemarker.content-type=text/html
spring.freemarker.allow-request-override=false
spring.freemarker.check-template-location=true
spring.freemarker.expose-request-attributes=false
spring.freemarker.expose-session-attributes=false
spring.freemarker.expose-spring-macro-helpers=false

#thymeleaf
spring.thymeleaf.prefix=classpath:/static/template/
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.content-type=text/html  
spring.thymeleaf.cache=false

封装实体

首先我们,封装一个Email实体Email.java:

代码语言:txt
AI代码解释
复制
/**
 * Email封装类 
 * 创建者 科帮网 
 * 创建时间 2017年7月20日
 *
 */
public class Email implements Serializable {
	private static final long serialVersionUID = 1L;
	//必填参数
	private String email;//接收方邮件
	private String subject;//主题
	private String content;//邮件内容
	//选填
	private String template;//模板
	private HashMap<String, String> kvMap;// 自定义参数
	... 省略 get set

业务实现

既然用了spring,就按照spring的方式来,先定义一个接口IMailService,接着是实现MailServiceImpl。

以下代码,实现了四种方式:纯文本,富文本(图片,附件),Freemarker模版以及Thymeleaf模版。

这里需要注意的是,springboot 1.4.0以后 Velocity 废弃了,官方建议用freemaker。而thymeleaf是博主自己实现的,显然效率没有freemaker高(评测对比见文章底部)。

代码语言:txt
AI代码解释
复制
@Service
public class MailServiceImpl implements IMailService {
	@Autowired
	private JavaMailSender mailSender;//执行者
	@Autowired
	public Configuration configuration;//freemarker
	@Autowired
	private SpringTemplateEngine  templateEngine;//thymeleaf
	@Value("${spring.mail.username}")
	public String USER_NAME;//发送者

	@Override
	public void send(Email mail) throws Exception {
		MailUtil mailUtil = new MailUtil();
		SimpleMailMessage message = new SimpleMailMessage();
		message.setFrom(USER_NAME);
		message.setTo(mail.getEmail());
		message.setSubject(mail.getSubject());
		message.setText(mail.getContent());
		mailUtil.start(mailSender, message);
	}

	@Override
	public void sendHtml(Email mail) throws Exception {
		MailUtil mailUtil = new MailUtil();
		MimeMessage message = mailSender.createMimeMessage();
		MimeMessageHelper helper = new MimeMessageHelper(message, true);
		helper.setFrom(USER_NAME);
		helper.setTo(mail.getEmail());
		helper.setSubject(mail.getSubject());
		helper.setText(
				"<html><body><img src=\"cid:springcloud\" ></body></html>",
				true);
		// 发送图片
		File file = ResourceUtils.getFile("classpath:static"
				+ Constants.SF_FILE_SEPARATOR + "image"
				+ Constants.SF_FILE_SEPARATOR + "springcloud.png");
		helper.addInline("springcloud", file);
		// 发送附件
		file = ResourceUtils.getFile("classpath:static"
				+ Constants.SF_FILE_SEPARATOR + "file"
				+ Constants.SF_FILE_SEPARATOR + "关注科帮网获取更多源码.zip");
		helper.addAttachment("科帮网", file);
		mailUtil.startHtml(mailSender, message);
	}

	@Override
	public void sendFreemarker(Email mail) throws Exception {
		MimeMessage message = mailSender.createMimeMessage();
		MimeMessageHelper helper = new MimeMessageHelper(message, true);
		helper.setFrom(USER_NAME);
		helper.setTo(mail.getEmail());
		helper.setSubject(mail.getSubject());
		Map<String, Object> model = new HashMap<String, Object>();
		model.put("content", mail.getContent());
		Template template = configuration.getTemplate(mail.getTemplate()+".flt");
		String text = FreeMarkerTemplateUtils.processTemplateIntoString(
				template, model);
		helper.setText(text, true);
		mailSender.send(message);
	}
	@Override
	public void sendThymeleaf(Email mail) throws Exception {
		MimeMessage message = mailSender.createMimeMessage();
		MimeMessageHelper helper = new MimeMessageHelper(message, true);
		helper.setFrom(USER_NAME);
		helper.setTo(mail.getEmail());
		helper.setSubject(mail.getSubject());
		Context context = new Context();
		context.setVariable("email", mail);
		String text = templateEngine.process(mail.getTemplate(), context);
		helper.setText(text, true);
		mailSender.send(message);
	}
}

测试用例

老司机带你去开车SpringbootMailApplication.java:

代码语言:txt
AI代码解释
复制
@SpringBootApplication
@ComponentScan(basePackages={"com.itstyle.mail"})
public class SpringbootMailApplication implements CommandLineRunner {
	@Autowired
	private IMailService mailService;
	public static void main(String[] args) {
		SpringApplication.run(SpringbootMailApplication.class, args);
	}

	@Override
	public void run(String... args) throws Exception {
		Email mail = new Email();
		mail.setEmail("345849402@qq.com");
		mail.setSubject("你个小逗比");
		mail.setContent("科帮网欢迎您");
		mail.setTemplate("welcome");
		mailService.sendFreemarker(mail);
	}
}

好了,不出意外,这四种方式应该绝对是没问题的,小伙伴们就等着右下角弹窗窗吧。

最后,做了一个小小的评测,生成模版时间对比(1000次循环)

  • Thymeleaf用时:2686ms
  • Freemarker用时:498ms

对比测试,建议使用Freemarker模版。

项目:http://git.oschina.net/52itstyle/spring-boot-mail

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
2 条评论
热度
最新
spring-boot-starter-mail模块很好用。
spring-boot-starter-mail模块很好用。
回复回复点赞举报
直接下载源码了!
直接下载源码了!
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
spring-boot-starter-mail技术总结
1. spring-boot-starter-mail技术总结 1.1. 配置读取类SMTPTransport 在application中需要配置的信息,在此类中都可以看到,可以在此类打断点查看 1.2. 配置文件 spring.mail.host=smtp.163.com spring.mail.username=15068610616@163.com spring.mail.password=xxx # 启动ssl spring.mail.properties.mail.smtp.ssl.enable=
老梁
2019/09/10
1.6K0
SpringBoot开发案例之异常处理并邮件通知
在项目开发中,对于异常处理我们通常有多种处理方式,比如:控制层手动捕获异常,拦截器统一处理异常。今天跟大家分享一种注解的方式,统一拦截异常并处理。
小柒2012
2019/12/05
9460
Springboot 系列(十三)使用邮件服务
在我们这个时代,邮件服务不管是对于工作上的交流,还是平时的各种邮件通知,都是一个十分重要的存在。Java 从很早时候就可以通过 Java mail 支持邮件服务。Spring 更是对 Java mail 进行了进一步的封装,抽象出了 JavaMailSender. 后来随着 Springboot 的出现,理所当然的出现了 spring-boot-starter-mail. 不管怎么说,每次的封装都让使用变得越来越简单。
未读代码
2019/11/04
1.7K0
SpringBoot邮件任务
最后的两个文件你用你自己电脑里面的就行,我是传了两张照片。 运行之后去网易邮箱查看:
别团等shy哥发育
2023/02/25
2510
SpringBoot邮件任务
Spring Cloud 2.x系列之springboot发送邮件
虽然现在短信验证已经最流行也是最常用的验证方式;但是邮件验证还是必不可少,依然是网站的必备功能之一。什么注册验证,忘记密码或者是给用户发送营销信息都是可以使用邮件发送功能的。最早期使用JavaMail的相关api来进行发送邮件的功能开发,后来spring整合了JavaMail的相关api推出了JavaMailSender更加简化了邮件发送的代码编写,现在springboot对此进行了封装就有了现在的spring-boot-starter-mail。
BUG弄潮儿
2022/06/30
4630
Spring Cloud 2.x系列之springboot发送邮件
Spring Boot 2.X(十三):邮件服务
邮件服务在开发中非常常见,比如用邮件注册账号、邮件作为找回密码的途径、用于订阅内容定期邮件推送等等,下面就简单的介绍下邮件实现方式。
朝雾轻寒
2019/11/05
4110
Spring Boot 2.X(十三):邮件服务
SpringBoot集成QQ/网易/Gmail邮箱发送邮件
添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> application.yml配置文件新增 spring: mail: # qq host: smtp.qq.com #发送邮件服务器 username: xx@qq.com #QQ邮箱 password:
高大北
2022/12/27
1.6K0
SpringBoot实现邮件发送
SMTP全称为Simple Mail Transfer Protocol(简单邮件传输协议),它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP认证要求必须提供账号和密码才能登陆服务器,其设计目的在于避免用户受到垃圾邮件的侵扰。
框架师
2021/03/05
7180
Java技术:SpringBoot实现邮件发送功能
邮件发送功能基本是每个完整业务系统要集成的功能之一,今天小编给大家介绍一下SpringBoot实现邮件发送功能,希望对大家能有所帮助!
小明互联网技术分享社区
2022/05/24
2K2
Java技术:SpringBoot实现邮件发送功能
ActiveMQ入门系列之应用:Springboot+ActiveMQ+JavaMail实现异步邮件发送「建议收藏」
现在邮件发送功能已经是几乎每个系统或网址必备的功能了,从用户注册的确认到找回密码再到消息提醒,这些功能普遍的会用到邮件发送功能。我们都买过火车票,买完后会有邮件提醒,有时候邮件并不是买完票立马就能收到邮件通知,这个就用到了异步邮件发送。
全栈程序员站长
2022/07/18
6460
ActiveMQ入门系列之应用:Springboot+ActiveMQ+JavaMail实现异步邮件发送「建议收藏」
Spring Boot集成邮件发送功能
目标:实现Spring Boot集成邮件发送功能 工具:IDEA--2020.1 学习目标:实现Spring Boot集成邮件发送功能 本次学习的工程下载链接放到文本最后面
背雷管的小青年
2020/06/09
8110
SpringBoot项目发送邮件
这里以163邮箱示例,需要开启POP3/SMTP/IMAP服务,因为你需要用到SMTP协议来实现实时发送邮件。
全栈开发日记
2022/05/13
2410
SpringBoot项目发送邮件
Spring Boot 发送邮件,端口号大有玄机!
Spring Boot 发送邮件,松哥之前专门写过文章,这里就不啰嗦了。还不懂 Spring Boot 如何发送邮件的小伙伴,翻到本文后半部分,有介绍。 今天想和大家聊一下 SMTP 服务器的端口问题,这个也是一个小伙伴提的问题,SMTP 服务器有众多端口:25、465、587 各自间有什么区别?可以随意使用吗?希望今天这篇文章能给你答案。 1. 什么是 SMTP SMTP 代表简单邮件传输协议,简而言之,它是通过 Internet 发送电子邮件的过程。计算机端口是个人计算机连接到网络并完成数据传输的方式
江南一点雨
2022/03/04
1K0
走进Java接口测试之使用JavaMailSender发送邮件
一般我们在做接口自动化时,都会通过钉钉或者邮件的方式通知测试结果信息。而且基本上邮件的内容都是测试报告。所以,今天就来讲讲如何利用 pring提供的 JavaMailSender接口,实现邮件发送功能。
高楼Zee
2019/07/17
2.3K0
走进Java接口测试之使用JavaMailSender发送邮件
SpringBoot邮件集成
邮件大家都不会陌生,如果从功能上去做一个划分的话,比如可以有注册激活邮件、密码找回邮件等等,如果从邮件的形式上来划分的话,又可以有简单文本邮件、HTML 邮件(包括模板 HTML 邮件)、附件邮件、静态资源邮件等。就是这样我们可以把不同形式的邮件加以功能需求化,做成一个一个的邮件服务去满足我们的业务需求。在 Spring Boot 中提供了一套针对于邮件服务的模块 spring-boot-starter-mail 以供我们开发项目需要的邮件服务。我们可以在项目中开发很多基础的邮件服务的业务逻辑,去适应很多的业务场景。
堆栈哲学
2022/11/24
8180
SpringBoot邮件集成
SpringBoot 2.x 集成QQ邮箱、网易系邮箱、Gmail邮箱发送邮件
发送模板邮件使用的方法与发送HTML邮件的方法一致。只是发送邮件时使用到的模板引擎,这里使用的模板引擎为Thymeleaf。
Javen
2018/08/21
3.1K0
SpringBoot 2.x 集成QQ邮箱、网易系邮箱、Gmail邮箱发送邮件
Springboot实现小程序端发送邮箱验证码功能
打开QQ邮箱网页→设置→账户→POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务→开启POP3/SMTP服务,然后就能看到授权码了
零式的天空
2022/03/26
8590
Springboot实现小程序端发送邮箱验证码功能
springboot (七) 邮件发送功能
介绍springboot的邮件发送。 由于很简单就没有分出server和imp之类,只是在controller简单写个方法进行测试。 首先pom文件加入spring-boot-starter-mail
IT架构圈
2018/06/01
6640
重学SpringBoot3-如何发送 Email
在企业应用开发中,发送邮件是一个非常常见的需求,比如用户注册验证、密码重置、系统通知等场景。SpringBoot 3提供了完善的邮件发送支持,本文将详细介绍如何在SpringBoot 3中实现邮件发送功能,并提供最佳实践建议。
CoderJia
2024/11/22
1760
重学SpringBoot3-如何发送 Email
springboot(十):邮件服务
springboot仍然在狂速发展,才五个多月没有关注,现在看官网已经到1.5.3.RELEASE版本了。准备慢慢在写写springboot相关的文章,本篇文章使用springboot最新版本1.5.3进行开发。 发送邮件应该是网站的必备功能之一,什么注册验证,忘记密码或者是给用户发送营销信息。最早期的时候我们会使用JavaMail相关api来写发送邮件的相关代码,后来spring退出了JavaMailSender更加简化了邮件发送的过程,在之后springboot对此进行了封装就有了现在的spring-b
纯洁的微笑
2018/04/19
1.4K0
相关推荐
spring-boot-starter-mail技术总结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档