第七章:SpringBoot整合JavaMail发送邮件

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

本章目标

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

构建项目

本章项目无关Web相关内容,因此建立项目时选择Jar形式建立,而且不须要预先导入依赖。项目结构以下图1所示:spring


图1

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


图2

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


图3

咱们的MailEntity包含了上图3的字段内容,都是一些必填选项,下面咱们来建立一个MailSender也就是邮件发送者实体,主要做用就是用来配置发送邮件参数以及执行发送邮件,代码以下图四、五、六、七、8所示:spring-boot


图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代码内容,以下图十、图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技术交流群
相关文章
相关标签/搜索