- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章JavaMailSender实现邮箱验证功能由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文通过JavaMailSender实现邮箱注册验证中遇到的问题开始着手,给大家详细分析了其原理以及问题的解决办法.
使用邮箱注册验证,我们需要理清设计思路:
问题一:注册信息提交后需要对填写的邮箱号发送邮件 。
问题二:邮件到达时用户如何进行激活,是通过get请求还是获取验证码(本篇使用get接口激活) 。
问题三:邮件激活如何设置有效时间 。
通过以上三个问题,博主来帮助大家掌握JavaMailSender邮箱验证 。
问题一 。
我首先需要解决如何向指定邮箱号发送邮件 。
在pom中加入如下依赖:
1
2
3
4
5
6
|
<!--email-->
<
dependency
>
<
groupId
>javax.mail</
groupId
>
<
artifactId
>mail</
artifactId
>
<
version
>1.4.7</
version
>
</
dependency
>
|
。
没错,我们使用javax拓展包下的mail依赖,所以代码中import别选错了 。
本篇代码一切从简,方便大家读懂 。
从上到下,我们先看接口:
1
2
3
4
5
6
7
8
9
10
11
12
|
@RequestMapping(value = "myajaxRegister")
@ResponseBody
public String sendEmail(@RequestParam String email){
User user = new User("luxiaotao","0331");
new Thread(){
@Override
public void run(){
emailService.senEmail(user,email);
}
}.start();
return "邮件已发送至您的邮箱,请激活";
}
|
。
因为是测试,所以博主制造了用户的假数据,拿到email才是关键 。
新建线程来执行邮件发送方法是为了提高用户的体验 。
试想下如果不为异步,用户需要等待邮件发送完才能跳转页面 。
来看邮件发送的业务层方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
@Override
public boolean senEmail(User user,String email) {
try {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost("smtp.163.com");
mailSender.setUsername("填写自己的163邮箱账号");
mailSender.setPassword("163邮箱密码");
MimeMessage mailMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mailMessage,true,"GBK");
helper.setFrom(mailSender.getUsername());
helper.setTo(email);
helper.setSubject("title");
helper.setText("邮件发送成功");
String emailToken = getEmailToken(user);
String url = "<
a
href
=
'http://localhost:8088/activateMail?emailToken="+emailToken+"'
>激活"+"</
a
></
br
><
h1
>如果以上超连接无法访问,请将以下网址复制到浏览器地址栏中</
h1
><
h2
>http://localhost:8088/activateMail?emailToken="+emailToken+"</
h2
>";
helper.setText(url,true);
mailSender.send(mailMessage);
return true;
}catch (Exception e){
e.printStackTrace();
return false;
}
}
|
。
此方法解释:
1.如果你的服务端邮箱是qq邮箱,则修改为:mailSender.setHost("smtp.qq.com"),
2.MimeMessageHelper是javax下mail的拓展类,如果你使用spring封装的mail则不需要。如果使用spring的mail,set方法都会不同 。
3.helper.setText(url,true);的第二个参数true表示当前String是html格式,所以标签都会起作用 。
4.getEmailToken(user);方法会在下面讲到 。
到这里为止,邮件已经可以正常发送,为了方便我给出html页面代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<!DOCTYPE html>
<
html
lang
=
"en"
>
<
head
>
<
meta
charset
=
"UTF-8"
>
<
title
>Title</
title
>
</
head
>
<
body
>
<
form
method
=
"get"
action
=
"/myajaxRegister"
>
email<
input
type
=
"text"
name
=
"email"
></
br
>
<
input
type
=
"submit"
value
=
"register"
>
</
form
>
</
body
>
</
html
>
|
问题二 。
如何使用get请求的API来激活邮件?
问题一中senEmail()下的getEmailToken(user)正是用来激活的 。
可以看出senEmail()发送的邮件内容是一个超链接,它就是用来启动我们的激活接口 。
但是这和getEmailToken(user)又有什么关系呢 。
从字面意思可以看出,我们这里将会使用一个token 。
先看激活controller 。
1
2
3
4
5
6
7
|
@RequestMapping(value = "activateMail")
public String activateMail(@RequestParam String emailToken){
if (emailService.balanceToken(emailToken)){
return "success";
}
return "error1";
}
|
。
通过超链接,我们发送一个emailToken参数给服务器 。
服务器拿到这个token之后,便会和本地的token进行比对,如果相同,则通过验证 。
这里我使用redis来做缓存,并且以token为key,用户信息(User)为value 。
来看两个方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
@Override
public String getEmailToken(User user){
String token = UUID.randomUUID().toString();
String value = user.toString();
redisTemplate.opsForValue().set(token,value);
return token;
}
@Override
public boolean balanceToken(String emailToken) {
if(redisTemplate.opsForValue().get(emailToken)!=null){
return true;
}
return false;
}
|
。
第一个方法使用redis将User信息转换成String并存入内存 。
第二个方法便是激活验证,通过key(Token)来检查redis中是否有值,成功返回true 。
问题三 。
那么如果设置邮箱验证的有效期呢?
讲到这里,经常使用redis的同学估计已经猜到了 。
只需要在getEmailToken()中加入一行代码即可:
1
2
3
4
5
6
7
8
|
@Override
public String getEmailToken(User user){
String token = UUID.randomUUID().toString();
String value = user.toString();
redisTemplate.opsForValue().set(token,value);
redisTemplate.expire(token,60, TimeUnit.SECONDS);
return token;
}
|
。
没错,使用redisTemplate.expire()设置当前键值对的过期时间 。
最后,来看下激活邮件吧:
以上就是本次介绍的JavaMailSender实现邮箱注册验证的全部内容,如果大家还有不明白的地方,可以在下方的留言区讨论.
原文链接:https://segmentfault.com/a/1190000012433867 。
最后此篇关于JavaMailSender实现邮箱验证功能的文章就讲到这里了,如果你想了解更多关于JavaMailSender实现邮箱验证功能的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我试图在两个元素之间放置一个图像,但是当它到达电子邮件客户端时,它不起作用。 是否有可能获得元素的绝对定位或至少用 float 或其他东西模拟它?如果没有,那么...回到基础知识然后(图片) 我有几个
我正在使用 Gmail SMTP 服务器发送来 self 网站用户的电子邮件。 这些是我的 settings.py 中的默认设置 EMAIL_HOST = 'smtp.gmail.com' EMAIL
最近做一个邮箱验证的功能,研究了一会,搞定了邮件的自动发送。下面用qq邮箱作为演示,一步一步来解释: 代码下载地址 首先,就是做到邮件的发送,代码如下: ?
本文实例为大家分享了常用的iOS正则表达式,供大家参考,具体内容如下 ?
我想知道 facebook API 允许 PHP 网页提取以下用户数据的先决条件是什么: 姓名 电子邮件 电话 据我了解,提取电话号码需要您的网站在 facebook/Websense 的白名单中吗?
我的 iOS 应用程序通过 username 和 password 使用 Firebase 登录。但我想提供更改设置中的 username 的可能性。 问题是,Firebase 是否支持更改用户名?
我正在尝试销毁我的 ROR 应用程序中的对象。 但我收到以下错误: ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relati
我正在尝试开发一个应用程序来访问来自邮箱(例如Gmail和Yahoo Mail)的电子邮件,并将其存储在本地存储中。有什么办法可以实现这一目标吗? 最佳答案 当然可以。 您可以使用imap_clien
我需要在 Gmail 中选择“已发送”和“垃圾邮件”文件夹,但我的帐户无法使用。后来我发现这些文件夹是非英语的,但它似乎也不代表那些语言的 unicode 字符。有人知道如何找出 Gmail 帐户的“
看起来这两种IPC机制非常相似,它们之间有什么区别吗? 最佳答案 我认为 MSDN 上对每种机制的介绍都回答了这个问题: Mailslots : A mailslot is a mechanism f
我一直在使用 Apple 的脚本编辑器编写 JXA 脚本。本质上,我想浏览我的收件箱文件夹并将超过 44 天的邮件移动到存档文件夹。我能够找到帐户、我的收件箱和存档“邮箱”,但我终究无法弄清楚如何将该
我正在为我的网站设计一个用户注册表,我们需要支持使用相同的密码通过用户名/电子邮件/手机登录。 用户可以通过用户名、邮箱或手机进行注册,注册后可以绑定(bind)邮箱或手机。 这是我正在考虑的表格,但
我想使用 Zimbra 允许像 myusername+something@mydomain.com 这样的电子邮件,而不是简单的 myusername@mydomain.com - 这是 Gmail
对 Akka Actor 邮箱进行压力测试的最佳方法是什么?我应该关注的测量是什么?我在猜测它的内存和延迟(完成工作需要多长时间)。 通常,在对网站进行负载测试时,我们会检查每秒请求数和每个请求的平均
我正在尝试通过 C# 代码在 Exchange 2010 服务器上创建/启用邮箱。我到处都看到人们使用下面显示的代码。 但是我得到以下错误: 术语“Enable-Mailbox”未被识别为 cmdle
我正在使用 python 包邮箱,我正在尝试提取消息并清理数据。我遇到了一个问题,对于大型数据库,我可以用我的示例文件调用构造函数,但是当我尝试打印任何消息时,我的程序挂起。我认为这是因为我要读取的文
本文实例讲述了Java正则验证电话,手机,邮箱,日期,金额的方法。分享给大家供大家参考,具体如下: ?
我正在使用 编写监控解决方案python3 与 exchangelib 并尝试计算我们团队邮箱中的消息。条件之一:收件人列表必须包含特定的电子邮件地址 . 当我使用 filter()与 author或
我刚刚在 Active Directory 中创建了一个用户。我想为此用户创建一个交换邮箱。我可以只设置一些用户属性吗?像这样: DirectoryEntry user = ...Get the us
我想为每个用户显示正在进行的对话列表。所以他们只需点击它并显示他们想要的对话。我很难找到如何创建此链接,因为邮箱中的对话对象没有 ID。 这个id好像是保存在notification对象中的,所以我尝
我是一名优秀的程序员,十分优秀!