今天是刘小爱自学Java的第104天。
感谢你的观看,谢谢你。
话不多说,开始今天的学习:
![d10f1ddf94af2dadfcdf0d02428760a7.png](https://i-blog.csdnimg.cn/blog_migrate/e2ca2bb50dac32c4d44cb3399863d4c7.jpeg)
注册某个网站一般都需要邮箱激活:
注册后,该网站会给你填写的邮箱发送一条激活信息,点击对应的链接即可完成激活。
激活成功后,就可以正常登录该网站了。
而该业务就可以通过Java代码实现:
关于邮件激活这一块,老实说本来不打算专门花一晚上时间学习的。
毕竟这种类型的知识点需要用到的时候相对而言很少,就算遇到了通过网络也能解决。
后来我想了想,我能够通过网络查询到别人的教程,那为何不能让别人查询我的笔记呢?
所以还是花了一个晚上的时间来学习,同时也方便自己以后遇到该需求后查看。
一、Java发送邮箱
既然是发送邮箱,首先需要一个固定的发送邮箱地址,而这个邮箱要开通POP3服务。
![4286e82f3e2a7d8f0689e8767b64f822.png](https://i-blog.csdnimg.cn/blog_migrate/1d9610337bb200d1ea139d6a7686ef1b.jpeg)
我这边使用的是网易提供的邮箱,通过邮箱的设置可以开启该服务。
开启服务后,需要通过手机号验证;验证成功会获得一个授权码,这个需要记下来。
有了这个授权码之后,就可以通过Java代码发送邮箱了,发件人也就是该邮箱。
当然发送邮件的技术挺多的,我这边使用的是apache提供的commons-mail。
导入该依赖后就可以编写代码了。
代码编写如下:
![1b7a6039604263c4660548b297617c61.png](https://i-blog.csdnimg.cn/blog_migrate/230e4c3bf10ffc1aec117421c23a6b20.jpeg)
①创建htmlEamil对象
apache-mail中是使用HtmlEmail这个类来操作邮件的。
②配置服务器参数
setHostName:设定服务器地址。
setAuthentication:翻译过来就是认证的意思,所以需要输入邮箱名和授权码。
③设置发件人和收件人
setCharset:设定编码格式为“gb2312”,国家制定的一套标准,gb即国标的拼音缩写。
setFrom:这个是设定发件人,也就是上述获取授权码的那个邮箱。
setaddTo:这个是设定收件人,也就是谁注册就是谁的邮箱,动态获取,我这边测试就先用我自己的另一个邮箱代替。
④设置邮件的主题和正文
setSubject:发给用户的邮件标题,一般都是“XXX网站激活邮件”
setMsg:发送正文,一般都是“恭喜你,注册成功!请点击链接激活”,再附带一个链接。
我这边先就随便填一个链接作为测试。
⑤发送邮件
send方法发送邮件,见名知意。
二、发送邮件及测试
1配置文件封装
和jdbc一样,可以将上述的代码封装到一个工具类中,并且关于服务器的配置信息也封装到一个配置文件中。
![a277f9ce20fab8c06fc9194c8e32801a.png](https://i-blog.csdnimg.cn/blog_migrate/2b87c062fdafb395943bfc9be04373da.jpeg)
①通过类加载器加载配置文件
MailUtil.class.getClassLoader():获取MailUtil的类加载器。
getResourceAsStream():翻译就是以流的方式获取源文件,参数为配置文件路径。
这样就获取了该配置文件对应的流。
②获取配置文件中的各个属性
load():将对应的流加载进properties。
getProperty():获取参数对应的值。
2发送邮件方法封装
将发邮件代码封装进一个方法中,通过配置文件,使代码更具有拓展性。
![64497d8c6b26d31271f03e8a42978f20.png](https://i-blog.csdnimg.cn/blog_migrate/1539c41a913f4e44645b15d0ed7dfdf9.jpeg)
在自定义的工具类MailUtil中创建一个静态方法sendEamil():
将发送邮件的代码封装进该方法中,需要发送邮件时用MailUtil调用sendEamil方法即可。
其中sendEamil方法有两个参数:
- userEamil:用户注册时填写的邮箱,也就是收件人的邮箱。
- msg:需要发送给用户的邮件信息。
3发送邮件代码补全
那什么时候发送邮件呢?
当用户激活成功后即可发送邮件:
![f4de3c7edd27da8454db87a36d42c848.png](https://i-blog.csdnimg.cn/blog_migrate/d188840ca94923378e79a51dd0a2d50b.jpeg)
在UserServlet中,昨天实现了注册功能,registerFlag作为结果响应给前端。
其中如果为true表示注册成功,以此作为判断,可以插入一段代码实现发送邮件的功能。
注意msg中链接的编写:
用户在收到邮箱之后点击该链接,会向userServlet发送一个请求。
而这个请求是我们需要接受的,所以路径填写userServlet,同时携带两个参数:
- methodName:active业务,UserServlet中要有个方法和其对应。
- code:当前用户的code。
4注册页面测试
将发送邮件代码补全后做一个测试,确定是否能够发送邮件。
![27d1ddd302e45336422a6b719546f479.png](https://i-blog.csdnimg.cn/blog_migrate/f0dead287f4ccf8cf712e453c115f406.jpeg)
在用户注册页面,注册成功之后,我设定的服务器邮箱会给用户填的邮箱发送激活邮件。
三、邮箱激活业务实现
用户点击激活邮件中的链接后,会发送请求到UserServlet,也就是上述我们自己填写的路径。
1.激活业务实现之web层
在UserServlet中设定一个方法来接受该请求,方法名即为请求中的参数active。
![f65f53d97277b4da84bb19131452ff0c.png](https://i-blog.csdnimg.cn/blog_migrate/fba274a01ba52731362bce0c0ba46530.jpeg)
①获取请求中携带的数据
有一个参数code,根据该参数在数据库中找到对应的用户并修改其激活状态。
②激活成功
如果激活成功,重定向到登录页面,在此之前先响应一个提示信息提醒用户。
response.setHeader()即可实现页面重定向,其有两个参数:
- refresh:刷新的意思。
- 3;login.html:3即表示为定时3秒再刷新,中间使用分号隔开,login.html即为重新跳转的页面。
③激活失败
原理同上,修改提示信息提醒用户重新注册,同时跳转的页面是注册页面。
3激活业务实现之service和dao层
![96cac8bda28865e7faa57857ec6767ad.png](https://i-blog.csdnimg.cn/blog_migrate/ad7010a824b25d6d1e425ebf55ddfe09.jpeg)
激活业务本身没有涉及到多少业务逻辑,所以代码编写并不多。
其中对数据库的操作时修改操作,所以使用template的update方法。
以上就是对于邮箱激活业务的实现:
- 用户激活成功,就会跳转登录页面。
- 用户激活失败,就会跳转注册页面,测试阶段一般激活失败可能就是自己编写的代码有问题。
最后
谢谢你的观看。
如果可以的话,麻烦帮忙点个赞,谢谢你。