通过spring实现javamail的那些事儿

以前很早的时候大家都用javamail实现发送邮件的功能,而且我们也一直沿用至今,代码拷过来用用就行了,现在我们改为用spring来实现,这样一来减少代码的复杂度,也能更好的契合spring理念

首先spring的相关jar包都是要引入的,其次要引入mail.jar

然后需要配置一个spring-mail.xml这样的文件,如果不新建,也可以在service中加入就行,但是为了做更好的分层,还是分开较好

配置spring的javamail发送器,这边配置了qq邮箱和qq企业邮箱的配置,需要注意的是host是不同的,另外如果是个人qq邮箱,需要使用授权码,授权码在qq邮箱中查看即可,而企业邮箱就是企业管理员分配的登录密码即可

附带一提网易邮箱是多么的坑爹:

使用网易邮箱会莫名报554的错误,也是就是说认定你的邮件是垃圾邮件,重复发送同一份邮件,内容一致,或者带有相关关键字,都会被列为垃圾邮件,然后会禁止30分钟左右,非常不人性化,所以不建议使用163作为发送器

配置邮箱的发送者以及标题,这个不写也可以,可以在发送的时候直接配置都行

最后的配置是freemarker模板,为何要模板,因为我们平时发送邮件会有很多不同的分类,分类配置在枚举中,根据不同的分类去选择不同的模板,一般来说注册码,密码重置,活动页面等等都需要作为一个单独的HTML来发送,而一个HTML我们不可能会以servlet的形式把标签都写在java代码中,所以采用模板来实现,是最好的方式:

配置模板路径

填充模板内容

编写邮件发送器

一方面从freemarker中构建邮件内容,一方面再执行mail发送操作

最后在需要调用的地方执行就行

然后收到的邮件内容就如下

需要注意的是,这么做发送邮件由于单线程操作是不可取的,可以参考之前的多线程,执行多线程操作,或者引入消息队列RMQ或者AMQ来发送邮件,异步操作优于同步操作。

原文发布于微信公众号 - BeJavaGod(wxleechenxiang)

原文发表时间:2017-02-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

如何在Ubuntu 14.04上安装和使用ArangoDB

ArangoDB是一个NoSQL数据库。它创建于2011年,当时已有许多NoSQL数据库,其目标是成为一个涵盖各种用例的综合数据库解决方案。

5010
来自专栏生信宝典

上传高通量测序原始文件

在我们发表高通量测序文章之前通常要上传测序数据到GEO数据库,现总结流程如下。 注册账户、填写MetaSheet 在NCBI GEO官网注册一个账号,然后登陆。...

2789
来自专栏北京马哥教育

Linux内存被吃掉了,它去哪里了?

在Windows下资源管理器查看内存使用的情况,如果使用率达到80%以上,再运行大程序就能感觉到系统不流畅了,因为在内存紧缺的情况下使用交换分区,频繁地从磁盘上...

1412
来自专栏腾讯移动品质中心TMQ的专栏

Android内存泄露测试不再蓝瘦,香菇

在进行Android内存泄露分析时,面对成千上万个对象,你是否蓝瘦,香菇?作为测试人员你在进行内存泄露测试之后,是否有勇气告诉开发同事程序已经没有内存泄露,可以...

2837
来自专栏Java帮帮-微信公众号-技术文章全总结

day28.Redis【Python教程】

下载:打开redis官方网站 https://redis.io/,推荐下载稳定版本(stable)

731
来自专栏美团技术团队

Lego:美团点评接口自动化测试实践

概述 接口自动化概述 众所周知,接口自动化测试有着如下特点: 低投入,高产出。 比较容易实现自动化。 和UI自动化测试相比更加稳定。 如何做好一个接口自动化测试...

1.4K13
来自专栏SeanCheney的专栏

Python模拟登陆 —— 征服验证码 3 CSDN

CSDN使用了spring的webflow <input type="hidden" name="lt" value="LT-58187-6D0O7tpTNBV...

2675
来自专栏IT大咖说

vSAN架构解析与6.7功能介绍

内容来源:2018 年 7 月 17 日,VMware大中华区原厂高级技术讲师史峻在“VMware直播分享 第二期”进行《vSAN架构解析与6.7功能介绍》演讲...

2713
来自专栏嵌入式程序猿

一步步学习MQX实时操作系统(2)

上次简单介绍了MQX的一些背景和知识,今天我们来学习以IAR为开发环境,以kv4x系列控制器为平台,学习分析例程,搭建SDK+MQX开发环境。 准备工...

2806
来自专栏编程微刊

基于promise用于浏览器和node.js的http客户端的axios

axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,它本身具有以下特征:

1222

扫码关注云+社区

领取腾讯云代金券