激活注册邮箱

一、目标

对注册时填写的邮箱进行激活,当注册成功以后,会显示一个前往激活邮箱的按钮,点击即可登录邮箱激活.

  • 情况1:修改了邮箱账号或者激活码,激活失败error;
  • 情况2:在指定时间内未激活,激活失败,重新获取激活码再次激活error;
  • 情况3:在符合条件的情况下,连续两次激活,第二次激活无效,重复激活error;
  • 情况4:按要求操作,激活成功success.

二、业务流程图:


三、实现步骤:

1 添加maven依赖,项目由maven管理

        <!--javamail begin--><dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4.1</version></dependency><!--javamail end-->

2 继承Authenticator类编写发送消息的方法,附注释

package com.changhong.camp.cmms.util;import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Date;
import java.util.Properties;/*** Created by 1250052380@qq.com on 2014/11/28.* 这里为了方便起见,将发送邮件的方法封装在这个授权认证的类里。* sendEmailActivationCode(String uuid, String email)方法就是向指定的收件箱email发送随机激活码uuid。*/
public class EmailAuthenticator extends Authenticator {private String username;private String password;public EmailAuthenticator(String username, String password) {this.username = username;this.password = password;}@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(username, password);}/*** 发送邮件的方法** @param uuid  发送随机激活码* @param email 目标邮箱地址*/public static void sendEmailActivationCode(String uuid, String email) {//todo/*初始化一个发件人*//*发件人邮箱账号*/String username = "15196271260@163.com";/*发件人邮箱密码*/String password = "123456";/*构造一个已授权认证的发件人对象*/Authenticator authenticator = new EmailAuthenticator(username, password);/*action代表的是动作,即用户点击邮箱的超链接所发送的请求,包括请求服务器controller的方法,并且携带两个参数*/String action = "http://localhost:8080/developer/active/email?email=" + email + "&code=" + uuid;/*构造一个包含激活邮箱动作的超链接*/String url = "<a href=\"" + action + "\" target=\"_self\">" + action + "</a>";/*具体的邮件内容*/String msg = "请在30分钟内点击链接激活邮箱:" + url;/*设置发送方服务器参数,163邮箱服务器是smtp.163.com,其他邮箱可查阅官方文档。*/Properties props = new Properties();props.setProperty("mail.smtp.host", "smtp.163.com");props.setProperty("mail.smtp.auth", "true");javax.mail.Session session = javax.mail.Session.getDefaultInstance(props, authenticator);
//        session.setDebug(true);try {/*构造一个Address发件人*/Address from = new InternetAddress(username);/*构造一个Address收件人*/Address to = new InternetAddress(email);/*构造一个电子邮件对象*MimeMessage参考博客:http://blog.csdn.net/yanan_seachange/article/details/8474922*/MimeMessage mimeMessage = new MimeMessage(session);/*设置消息发送者*/mimeMessage.setFrom(from);/*邮件主题*/mimeMessage.setSubject("邮箱激活");/*邮件发送日期*/mimeMessage.setSentDate(new Date());/*邮件的内容以及内容的类型和编码*/mimeMessage.setContent(msg, "text/html;charset=utf-8");mimeMessage.setRecipient(Message.RecipientType.TO, to);/*执行发送邮件*/Transport.send(mimeMessage);} catch (MessagingException e) {e.printStackTrace();}}
}
3 在注册的时候调用发送邮件的方法并将随机激活码存入到数据库

EmailAuthenticator.sendEmailActivationCode(uuid, userDto.getEmail());
4 当发送激活码以后,假如用户没有即使去激活,在将来激活的时候需要再次获取激活码,新加一个方法用来再次发送激活码

/*** @param email 接收激活链接的邮箱* @return*/@RequestMapping(value = "active/make", method = RequestMethod.POST)@ResponseBodypublic ResponseEntity<Object> makeActivationCode(@RequestParam(value = "email") String email) {try {UserDto userDto = developerService.findByEmail(email);String uuid = StringUtils.generateUuidString();userDto.setEmailActivationCode(uuid);developerService.update(userDto);EmailAuthenticator.sendEmailActivationCode(uuid, userDto.getEmail());return new ResponseEntity(null, HttpStatus.OK);} catch (CoreException e) {e.printStackTrace();return new ResponseEntity(null, HttpStatus.BAD_REQUEST);}}
5 当用户登陆邮箱点击激活超链接时会以get方式请求服务器,服务器的激活处理

用户前往邮箱查看邮件,点击超链接发送请求携带的参数为用户邮箱账号和服务器发送的激活码,请求发送至第5步。不同情况会转到不同的页面。



/*** 处理用户点击链接后的激活动作** @param email 激活邮箱账号* @param code  激活码* @return 激活之后的指定页面*/@RequestMapping(value = "active/email", method = RequestMethod.GET)public String handleActiveEmail(@RequestParam(value = "email") String email,@RequestParam(value = "code") String code,HttpServletResponse response) {try {UserDto userDto = developerService.findByEmail(email);Date now = new Date();long interval = (now.getTime() - userDto.getUpdateTime().getTime()) / (1000 * 60);if (userDto == null) {//账号不存在} else if (interval <= 1) {System.out.println(interval);//30分钟内激活if (userDto.getEmailActivationCode().equals(code.trim()) && userDto.getEmailVerified() == false) {userDto.setEmailVerified(true);developerService.update(userDto);return "developer/register";} else if (userDto.getEmailActivationCode().equals(code.trim()) && userDto.getEmailVerified() == true) {//已经激活过了,暂且返回该页面return "developer/duplicate";} else {//激活码不正确,验证失败,暂且返回该页面return "developer/error";}} else {//超过指定时间未激活,重新获取激活码return "developer/reactive";}} catch (CoreException e) {e.printStackTrace();}return "developer/error";}

6 注册页面,填写相关信息并注册,表单的验证这里忽略!


7 注册成功以后,,提交请求至第3步,会显示激活按钮,提示前往激活



四、总结

主要工作:查看邮件服务器的参数、添加maven依赖、编写邮件发送方法、controller的处理请求的方法(包括注册、获取激活码、激活事件处理),页面的ajax提交表单等。本人属新人

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/26595.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文教你学会实现以邮件激活的注册账户代码

实现思路 通常&#xff0c;我们在进行各大平台进行注册账户时&#xff0c;都会在邮箱收到一封激活邮件&#xff0c;而在点击其中的激活链接之后&#xff0c;我们就能够激活账户&#xff0c;否则&#xff0c;我们将无法正常使用账户&#xff0c;这使得服务平台所拥有的激活用户…

实现邮箱激活账号功能

原文地址&#xff1a;http://blog.sina.com.cn/s/blog_636ed7d00100nss0.html 我们在注册大型网站的时候&#xff0c;比如像新浪&#xff0c;阿里巴巴网站的时候&#xff0c;填写完注册信息后&#xff0c;都会给用户的邮箱发送一个激活注册账号的邮件&#xff0c;让我们激活&am…

别把 OpenAI 太当回事,它远未达到替换前端的地步

最近几个月&#xff0c;我和很多初入行的开发人员交谈&#xff0c;他们对AI越来越感到焦虑。他们看到像GPT-4这样的工具展示的越来越令人印象深刻的演示&#xff0c;担心等他们掌握了HTML/CSS/JS&#xff0c;就没有任何工作机会了。这种情绪现在在Twitter上广泛存在&#xff1a…

AI 时代,知识工作者的生存指南

最近&#xff0c;大家可能已经见识过 AI 的威力了吧&#xff0c;以 ChatGPT 为代表的 人工智能&#xff08;AI&#xff09;展现出接近人一样的回答水准。 来自 Craft AI Assitant AI 就在那里&#xff0c;是房间里的大象&#xff0c;大家不能总装做对自己没有影响。要知道&…

这 13 种职业用AI提效的 40 类场景盘点

随着人工智能技术的发展&#xff0c;职业领域出现了诸如我们“小蜜蜂助手Beezy”等神奇的工具&#xff0c;大幅度提升了各行各业里从业人员的工作效率。 笔者今天将详述13种常见职业&#xff0c;分别是如何利用这些工具在实际工作过程中来帮助自己提升效率的。大量干货和私藏宝…

【猫娘小可爱频道】闲聊+1

本篇是居士养的一只喵&#xff0c;看了一个视频后的观后感&#xff0c;视频已附在文章末尾&#xff0c;可点击小程序观看。 欢迎大家讨论~ 喵喵看这个视频突然产生的一个想法&#xff0c;是比较有实感的感觉到了时间的美感或者四维时间轴对事物的影响。就是有时候很美的东西是某…

文心一言实际测试——让我们拿实际说好坏

文心一言实际测试——让我们拿实际说好坏 4月16日&#xff0c;文心一言闪亮登场&#xff0c;就关于大家最关心的几个问题&#xff0c;让我们一起来看看效果吧~ 创作能力&#xff1a; 听说飞桨高校领航团缺少一个slogan&#xff0c;让我们听听文心一言怎么说 “聚焦科研&am…

网络编程的开始(猫娘和汪君的凄美爱情故事)

现在让我们&#xff08;快乐的&#xff09;来学习java中的网络编程 &#xff08;猫娘和汪君在最后&#xff09; 一、认识InetAddress 1.首先通过查阅API帮助文档 我们知道&#xff0c;InetAddress是net包下的一个类&#xff0c;表示互联网协议&#xff08;IP&#xff09;地址。…

IT 领导者揭示了对 ChatGPT 的网络恐惧

根据黑莓的最新研究&#xff0c;大多数(51%)安全领导者预计ChatGPT将在一年内成为成功的网络攻击的核心。 对北美、英国和澳大利亚的1500名IT决策者的调查还发现&#xff0c;71%的人认为民族国家可能已经将该技术用于针对其他国家的恶意目的。 ChatGPT是由OpenAI开发的人工…

一群中国芯片技术小球的奋斗故事系列:“中科融合的AI-3D芯片追赶美国德州仪器DLP技术之产业和技术初探-part III”

引子 2023年初春&#xff0c;冬雪未化&#xff0c;ChatGPT和GPT4一声惊雷&#xff0c;以颠覆的表现震惊全球&#xff0c;被称之为AI的“iPhone时刻”。微软全线产品迅速导入&#xff0c;生产力工具与搜索&#xff0c;经过了30年&#xff0c;再次分久必合&#xff01;全世界人民…

干货!来自北大、KAUST、斯坦福、达摩院的大模型前沿动态:表格推理、代码生成、MiniGPT-4、生成式推理...

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; ChatGPT的发布使得国内外众多的研究机构掀起了一股AI热潮&#xff0c;而这也进一步推动了人们对大语言模型的深入研究。2023年4月26日&#xff0c;AI TIME举办的大模型专场四活动邀请了阿里巴巴达摩院NLP研究员…

5月25日活动报名 | 与五位来自AI产业和开发者工具服务领域的大咖一起思辨代码自动生成...

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 10年内AI会淘汰程序员这个职业么&#xff1f; AI技术的发展已经给我们带来了很多的变化&#xff0c;尤其是在计算机编程领域&#xff0c;基于大模型能力的代码生成工具在这1年来得到了越来越多的关注&#xff0…

永远年轻,永远在路上的AI TIME

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 在2019年的智源人工智能大会上&#xff0c;我第一次接触AI TIME&#xff0c;时至今日&#xff0c;加入AI TIME已经四年了。在过去的四年里&#xff0c;AI技术、产业发生了翻天覆地的变化&#xff0c;我自己的思…

除了AIGC,2023年还要面临哪些技术“双刃剑”?

最近两个月&#xff0c;人们惊叹于AIGC的“超能力”&#xff0c;但也对AIGC带来的潜在风险表示担忧。ChatGPT之父Sam Altman在最近的一次访谈中表示&#xff0c;AI在为人类的聪明才智提供力量倍增器的同时&#xff0c;也可能带来技术滥用、事故等安全风险。他重点指出「恶意人员…

生成式AI火爆全球,你是否已经做好了准备?

2023年&#xff0c;随着ChatGPT的火爆全球&#xff0c;生成式AI也引发了各界人士的广泛关注。一时间&#xff0c;从国际科技巨头到国内人工智能企业&#xff0c;几乎所有我们耳熟能详的科技公司&#xff0c;都纷纷杀入了生成式AI市场。 作为全球云计算技术的开创者和领导者&…

面对AI“龙卷风”破坏力 白宫“软着陆”欧盟“硬防御”

ChatGPT的风靡与风险将OpenAI的CEO山姆奥特曼&#xff08;Sam Altman&#xff09;送进白宫&#xff0c;他被蹲守在美国总统府邸的记者们围追&#xff0c;面对5月4日白宫发起的AI风险治理会议&#xff0c;奥特曼很官方地给出“重要也很及时”的回应&#xff0c;自信的反复强调“…

QQGC?揭秘QQ的AI绘画大模型技术

&#x1f449;腾小云导读 2022年来&#xff0c;AIGC概念迅速出圈并快速形成产业生态&#xff0c;成为继PGC、UGC之后新的数字内容创作形式。QQ影像中心提出了自研的AI画画技术方案——QQGC&#xff0c;本文将介绍在QQGC基础大模型训练中的实践和探索&#xff0c;接着往下看吧~ …

Worldcoin,大众的加密货币还是个人的数字身份?

2022年8月&#xff0c;在印度班加罗尔一间大学的教室里&#xff0c;摩西•阿莫得&#xff08;Moiz Ahmed&#xff09;举起一个排球大小、中间有一个玻璃开口的铬合金球。阿莫得向学生们解释说&#xff0c;如果用这个叫做“Orb”的设备扫描他们的虹膜&#xff0c;他们将获得25个…

UML统一建模语言(UML类图)

UML统一建模语言 UMLUML类图类图的作用类的表示方法 类与类之间关系的表示方式关联关系单向关联双向关联自关联 聚合关系组合关系依赖关系继承关系&#xff08;泛化关系&#xff09;实现关系 UML 统一建模语言(Unified Modeling Language&#xff0c;UML&#xff09;是用来设计…

用StartUML生成GoF设计模式类图与代码(c++)

先介绍一下startUML StarUML&#xff08;http://www.staruml.com&#xff09;的前身是Plastic&#xff0c;从1996年开始开发。1998年开始&#xff0c;Plastic转变为UML建模工具。2005年改名为StarUML&#xff0c;最新版本StarUML 5.0已经是一款功能全面的产品&#xff0c;支持…