网站首页 > 技术文章 正文
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专题】【spring源码】
- 【mysql优化专题】【HTTP协议】
- 【架构技术专题】【多线程专题】
- 【dubbo专题】【dubbo源码专题】
- 【JVM调优专题】【HTTP专题】
- 【设计模式专题】【高并发专题】
- 【架构技术专题】【Lucene专题】
- 【数据结构专题】【redis专题】
- 【mq中间件专题】【netty专题】
- 【java面试专题】【zookeeper】
猜你喜欢
- 2024-10-21 Spring Boot中添加Thymeleaf模板 springboot 添加filter
- 2024-10-21 Spring Boot 的静态资源处理 springboot静态资源配置
- 2024-10-21 Spring Boot 系列@ControllerAdvice 拦截异常并统一处理
- 2024-10-21 Spring Boot 入门教程 | 图文讲解
- 2024-10-21 牛刀小试——五分钟入门Spring Boot
- 2024-10-21 我教你初识SpringBoot——写HelloWorld
- 2024-10-21 Springboot静态资源的访问 springboot2.0静态资源
- 2024-10-21 每日分享- springboot 微服务项目如何集成 html
- 2024-10-21 SpringBoot中异步请求和异步调用(看这一篇就够了)
- 2024-10-21 Spring Boot 2.x基础教程:使用 ECharts 绘制各种华丽的数据图表
你 发表评论:
欢迎- 02-20利用神经网络模型检测摄像头上的可疑行为
- 02-20直击心灵:高频核心听力你了解吗?_高频听力的正常范围值是多少
- 02-20YOLOv8 POSE+XGBoost进行人体姿态检测
- 02-20100个篮球英文术语详细解释,从此听懂NBA解说
- 02-20最全紧固件中英文对照,外贸必备词典一
- 02-20带你开发一个视频动态手势识别模型
- 02-20详细介绍一下Java基础中HashMap如何进行扩容操作?
- 02-20GTX 1070 Ti显卡评测:你会购买哪一款?
- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)