第七章:SpringBoot整合JavaMail发送邮件-程序员宅基地

技术标签: java  开发工具  markdown  

JavaMail是SUN提供给广大Java开发人员的一款邮件发送和接受的一款开源类库,支持常用的邮件协议,如:SMTP、POP3、IMAP,开发人员使用JavaMail编写邮件程序时,不再需要考虑底层的通讯细节如:Socket而是关注在逻辑层面。JavaMail可以发送各种复杂MIME格式的邮件内容,注意JavaMail仅支持JDK4及以上版本。虽然JavaMail是JDK的API但它并没有直接加入JDK中,所以我们需要另外添加依赖,下面我们开始讲解本章的内容。

本章目标

将Java提供的JavaMail类库与SpringBoot项目进行整合,并且简单封装下JavaMail类库。

构建项目

本章项目无关Web相关内容,所以创建项目时选择Jar形式创建,并且不需要预先导入依赖。项目结构如下图1所示:


图1

可以看到上图1内容,多余的依赖并没有添加,如果你选择的是War项目也没有关系名,那好,我们接下来把我们的主角JavaMail请出来吧,把对应的依赖添加到pom.xml配置文件内。如下图2所示:


图2

依赖我们已经导入成功了,接下来我们开始编写JavaMail的封装,我这里简单的对JavaMail做出封装,如果您需要更完美的封装,请对我的代码做出修改即可,先来编写一个MailEntity类来保存发送邮件时需要的参数字段,如下图3所示:


图3

我们的MailEntity包含了上图3的字段内容,都是一些必填选项,下面我们来创建一个MailSender也就是邮件发送者实体,主要作用就是用来配置发送邮件参数以及执行发送邮件,代码如下图4、5、6、7、8所示:


图4

图5

图6

图7

图8

因为简书的富文本编辑器不支持代码块,下次编写文章使用MarkDown方式来写,类过长贴起来图挺费劲。上面可以看到我使用到了MailContentTypeEnum以及PropertiesUtil工具类。

MailContentTypeEnum

这是一个我自定义的枚举类型,枚举类型包含了邮件内容的类型,目前我仅仅添加了两种,一种是html另外一种则是text形式,具体代码如下图9所示:


图9
PropertiesUtil

PropertiesUtil是用于读取*.properties配置文件的工具类,使用JavaMail需要配置SMTP以及用户名、密码等也就是MailEntity内的字段,那么我们在/resource目录下创建一个名字叫mail.properties的配置文件,里面存放我们定义的邮件发送参数配置,这样方便修改,我分别贴出PropertiesUtil、mail.properties代码内容,如下图10、图11所示:


图10

图11

我使用的QQ邮箱地址作为测试,如果你需要使用你的QQ地址作为测试,请先到QQ邮箱开启POP3/SMTP服务,开启步骤如下。

开启POP3/SMTP

第一步:进入邮箱点击“设置”,如下图12所示:


图12

第二步:点击“账户”后往下拉找到POP3/IMAP/SMTP...,如下图13所示:


图13

我的POP3以及SMTP以及开启了所以这里显示的状态是已开启,如果您第一次使用QQ邮箱的SMTP服务,请点击“开启”并且按照提示步骤完成获取“授权码”即可,授权码就是发送邮件参数的smtp.pwd属性。

测试发送邮件

我们创建一个TestMail类来作为测试入口,因为我们的项目是jar形式,所以我们直接新建一个main方法直接调用发送邮件就可以了,如下图14所示测试代码:


图14

我是向我的钉钉邮箱发送了一条文本类型的测试邮件,发送效果图如下图15所示:


图15

可以看到我们的邮件收到了,证明我们已经完成了邮件发送的功能了,但是你在发送中配置mail.properties文件时配置昵称的时候最有可能出现的问题就是乱码,那么该问题如何解决呢?

昵称乱码问题解决

第一步:修改InteiiJ IDEA工具的properties文件的编码,点击File->Setting->Editor->File Encodings将下面的Default encoding设置为UTF-8,如下图16所示:


图16

那么我们的mail.properties内使用ASCII编码进行配置昵称就可以了,具体中文如何转换ASCII,请大家访问tool.oschina.net/encode在线转换即可。修改完成后再次测试发送邮件,你就会发现乱码问题解决了。

总结

上述内容就是本章的所有讲解,本章主要讲解了在SpringBoot项目内是如何使用JavaMail来进行发送简单邮件,简单封装了下MailSender类以及对象实体MailEntity,如果需要发送HTML内容的邮件修改contentType(MailContentTypeEnum.HTML)然后content("html代码")即可。

本章代码已经上传码云:

SpringBoot配套源码地址:gitee.com/hengboy/spr…

SpringCloud配套源码地址:gitee.com/hengboy/spr…

SpringBoot相关系列文章请访问:目录:SpringBoot学习目录

QueryDSL相关系列文章请访问:QueryDSL通用查询框架学习目录

SpringDataJPA相关系列文章请访问:目录:SpringDataJPA学习目录

SpringBoot相关文章请访问:目录:SpringBoot学习目录,感谢阅读!

欢迎加入QQ技术交流群,共同进步。


QQ技术交流群


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34221276/article/details/88005434

智能推荐

神秘魔术动作能量冲击波特效音效Arcane Forces第一套 MAGIC - ARCANE FORCES DESIGNED_magic – arcane forces-程序员宅基地

文章浏览阅读222次。神秘魔术动作能量冲击波特效音效Arcane Forces第一套 MAGIC - ARCANE FORCES DESIGNED原文地址:https://www.aeziyuan.com/t-20646.html文件格式:.WAV文件大小:1.26 GB(解压包大小)文件数量:124音频码率:96kHz, 24-bit音效适用于任何音/视频后期编辑软件,直接导入即可使用包含:酸,奥术,障壁,呼吸,增益,诅咒,减伤,神圣,电,能量,火,玻璃,冰,冲击,光,液体,金属,加工,抛射,隆隆声,序,召唤,._magic – arcane forces

commons-io工具包的基本使用_ioutils.tobytearray-程序员宅基地

文章浏览阅读4w次,点赞57次,收藏304次。目录一、工具类IOUtils的使用:FileUtils的使用:FilenameUtils的使用FileSystemUtils的使用:二、输入、输出三、Filters过滤器四、Comparators比较器五、Monitor文件监控简介:java io操作是开发中比较常用的技术,但是如果每次都使用原生的IO流来操作会显得比较繁琐。Common IO 是一..._ioutils.tobytearray

平面射影_坐标平面射影是什么-程序员宅基地

文章浏览阅读1.9k次。欧氏坐标(x,y)->-> 平面上所有无穷远点所构成的集合称为无穷远直线。 射影平面:由欧氏平面与无穷远直线的并集所形成的扩展平面称为射影平面,有时也称为二维射影空间。向量的反对称矩阵定义为的叉积为矩阵具有如下性质:对偶命题:在射影平面内,点和线是一对互为对偶元素。在包含"点"和“线”元素的命题中,如果将两个元素的角色互换,则对应的命题也成立,并称它们是一对互为对偶命题。,二维向量称为..._坐标平面射影是什么

详解HTML的a标签(超链接标签)-程序员宅基地

文章浏览阅读1k次。原文  简书原文:https://www.jianshu.com/p/d6a2499db73b大纲  1、什么是<a>标签  2、<a>标签的几个重要属性  3、a标签的运行机制  4、a标签常用的协议  5、超链接标签的样式问题——a标签的伪类选择器的书写顺序1、什么是<a>标签  <a> 标签定义超链接,用于从一张页面链接到另..._超链

【通信原理】五、模拟调制系统_vsb系统仿真-程序员宅基地

文章浏览阅读1.9k次,点赞3次,收藏15次。AM、DSB、SSB、FM、包络检波、相干解调_vsb系统仿真

通过OpenSSL获取证书扩展属性之二:“密钥用法”和"增强型密钥用法"_openssl 增强型密钥用法-程序员宅基地

文章浏览阅读1.1w次。介绍如何使用Openssl解析CA证书、获取“密钥用法”和“增强型密钥用法”扩展属性。_openssl 增强型密钥用法

随便推点

python——stack()和unstack()用法_unstack函数-程序员宅基地

文章浏览阅读1.2w次,点赞12次,收藏54次。在学习python的过程中遇到了这两个函数,讲讲学习的心得_unstack函数

AOP与OOP有什么区别,谈谈AOP的原理是什么,大厂Android高级面试题汇总解答-程序员宅基地

文章浏览阅读521次,点赞25次,收藏11次。包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频**

最小费用流_单向图费用流-程序员宅基地

文章浏览阅读1.5k次。单向图#include//每次找费用的最短路,更新残留网络图直到找不到最短路为止#include//最大费用 权值取负值 结果取负值#include#include#includeusing namespace std;const int inf=0x3f3f3f3f;struct Node_单向图费用流

Python中的5个高阶概念属性的知识点!你要了解明白哦!_python属性的五大类-程序员宅基地

文章浏览阅读318次。在现代编程世界中,面向对象编程(OOP)语言在改变软件开发中的设计和实现模式方面发挥了进化作用。作为OOP家族的重要成员,Python在过去10年左右逐渐流行起来。与其他OOP语言一样,Python围绕大量不同的对象操作其数据,包括模块、类和函数。如果您有任何OOP语言的编程经验,您应该知道所有对象都有其内部特征数据,称为字段、属性或属性。在Python中,这些对象绑定的特征数据通常称为属性。在本文中,我将特别在自定义类的上下文中讨论它们。1. 类属性为了更好地管理项目中的数据,我们经常需要_python属性的五大类

python 基于PHP+MySQL的装修网站的设计与实现_python抓取装修需求-程序员宅基地

文章浏览阅读282次。5:系统简介设置:系统管理员应该可以通过系统简介设置功能设置系统前台的系统简介信息,系统前台的系统简介是随后台的变化而变化的,系统简介应该使用编辑器,实现图片,文字,列表,样式等多功能输入。6:系统公告设置:系统管理员应该可以通过系统公告设置功能设置系统前台的系统公告信息,系统前台的系统公告是随后台的变化而变化的,系统公告应该使用编辑器,实现图片,文字,列表,样式等多功能输入。应该都要能修改自己的登录密码,修改后需要重新登录。13:装修效果:员工给客户上传装修效果和装修进度,客户查询。_python抓取装修需求