C#通过邮箱验证来找回密码 | 您所在的位置:网站首页 › 怎么通过邮箱来更改id密码呢手机 › C#通过邮箱验证来找回密码 |
写在前面:
嘤嘤嘤 开头嘤嘤嘤,先扯一哈卵谈?,然后再聊代码修福报。大家都知道忘记密码一直是一个让人头大的问题,比如我这鱼的记忆就忘记了Ubuntu里面的MySql密码 然后直接GG...只能删库跑路啦 我没了 我人直接没啦。这是双系统里面的Ubuntu,不是虚拟机里的Ubuntu,有图有真相.....忘记密码的后果是很严重的。 正是因为有极少部分像我一样的、会忘记密码的沙雕存在,所以找回密码功能是非常重要的。找回密码功能简单来说就是俩个步骤:①输入账号并通过验证,证明这个号是你的;②输入新密码,MD5加密保存到数据库的用户表中。(关于MD5加密存储,前段时间写过一篇博文 传送门:C#操作Sql Server数据库以及MD5加密存储)。现在的验证方式有很多种:通过邮箱进行验证、通过手机号进行短信验证、通过密保问题进行验证...等等。我考虑到运营商需要收取一毛钱一条的短信费,于是手机号验证直接被我pass掉了(此处手动滑稽并流下穷人的泪水)。然后通过密保问题来进行很简单实现的,我记得早期QQ就有这个密保验证找回密码的功能。当时QQ要求填写3个密保问题,比如:你的小学班主任是?你的学号是?.....个人不是很喜欢密保问题验证找回密码,于是我在数据库大作业中选择的找回密码方式是邮箱认证。好了 原谅我是个话痨,终于说到这篇博文的正题啦——C#如何通过邮箱认证来找回密码。(QQ邮箱的小弹窗真好!点击文本链接还可以跳转到网页)。 在QQ邮箱的邮箱设置中,进入账户页面,开启QQ邮箱的一系列服务?然后验证密保即可获取当前账号的QQ邮箱授权码。什么是授权码,它又是如何设置的?咱也不知道咱也不敢问(手动滑稽.jpg 紫色字体是传送门 点击跳转)。 授权码其实就是一个QQ邮箱推出的、长度为16位的、用于登录第三方客户端的专用密码。 ————————————————2019.06.20更新—————————————————需要注意一点:QQ邮箱的授权码是具有时效性的,一段时间后授权码会失效而导致邮箱验证码发送失败。 这种情况很好解决的,只需要在QQ邮箱中重新获取一个新的授权码即可,为了方便更新授权码,我把授权码写成了全局变量。 这样只需把之前的源代码中的发件人邮箱用Program.QQemail代替,授权码用Program.AuthorizationCode代替即可。 验证码的生成,其实就是伪随机字符串的生成。这部分在前面的博文C#生成图形验证码中已经提到过了。我是通过无脑for循环+Random随机选择字符来实现的.......? 先把验证码中包含的所有元素(大小写字母和数字)放入一个string型的字符串list中,然后调用Random()随机生成一个下标,通过这个下标来获取list中对应的字符,for循环length次后,就能得到一个长度为length的伪随机验证码。是不是很简单很low呀??我直接把这段代码写在了项目的静态类Program中,这样的话,所有窗体都可以通过调用静态方法Program.CreateRandomCode(length)来生成一个包含大小写字母和数字的、长度位length的伪随机验证码。 public static string CreateRandomCode(int length) //生成由数字和大小写字母组成的验证码 { string list = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890"; //list中存放着验证码的元素 Random random = new Random(); string code = ""; //验证码 for (int i = 0; i < length; i++) //循环6次得到一个伪随机的六位数验证码 { code += list[random.Next(0, list.Length - 1)]; } return code; } C#发送邮件:嘤嘤嘤,这部分需要先引进俩个命名空间。 using System.Net; using System.Net.Mail;接着实例化邮件类MailMessage,然后就像很简单了呀。像正常地写邮件一样:输入收件人邮箱地址、邮件标题、邮件内容等等。最后输入发件人邮箱和邮箱授权码验证你的身份就发送成功了。 MailMessage mail = new MailMessage(); //实例化一个邮件类 mail.From = new MailAddress("(发件人邮箱地址)"); //发件人邮箱地址 mail.To.Add(new MailAddress("(收件人邮箱地址)")); //收件人邮箱地址 mail.Subject = "(邮件标题)"; //邮件标题 mail.Body = "(邮件内容)"; //邮件内容 SmtpClient client = new SmtpClient("smtp.qq.com"); //实例化一个SmtpClient类 client.EnableSsl = true; //使用安全加密连接 client.Credentials = new NetworkCredential("(发件人邮箱)", "(邮箱授权码)");//验证发件人身份(发件人邮箱,邮箱授权码); client.Send(mail); //发送邮件 MessageBox.Show("发送成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);不要问我是怎么晓得的,问就是我像蔡徐坤一样会ctrl。虽然我写代码的样子菜得像蔡徐坤,但是我会ctrl啊。写代码的样子菜得像蔡徐坤真的一点不要紧,最重要的是要像蔡徐坤一样会ctrl,这里的ctrl不是指像坤坤一样喜欢唱跳rap篮球,而是说要会用多用ctrl+鼠标左键。碰到不懂的函数或类就直接Ctrl+鼠标左键点击它查看它的定义。 比如对着MailMessage按下ctrl+鼠标左键点击后,就能查看它的定义,如图: 根据常识我们可以知道,邮箱验证的时间是需要控制的,比如:①发送邮件验证码的一定时间内不能再次发送(我设定的是1分钟);②邮件验证码具有时效性,超过一定的时间验证码就会失效(我设定的是5分钟)。我先定义了全局变量:俩个计时器cnt1、cnt2和一个邮箱验证码code。然后用到了俩个Timer控件,一个用于控制多次发送验证码的时间间隔,一个用来记录验证码的有效期限。"Talk is cheap, show me the code." (注释已经写得很详细啦) 这部分我是在用户注册的时候实现的,将用户注册的所有信息都保持到sql server数据库中的login_table表中。在找回密码时,只需要连接到sql server通过SELECT语句进行查询即可,只有当输入的账号和邮箱是绑定好的才能发送邮件验证码进行邮箱验证。这部分很简单实现的,在上面的那个代码块里已经写啦,看下效果图吧(原谅我的找回密码界面很丑?)。
验证码的判断是忽略字母大小写的,这里我把文本框textBox中输入的内容和邮箱验证码都通过ToLower()来转换成小写字母再进行比对。 if (textBox.Text.ToLower() != code.ToLower()) //若验证码输入错误 { MessageBox.Show("您输入的验证码有误!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else //验证成功 { MessageBox.Show("验证成功!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information); } 好好coding,天天向上! |
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |