zoukankan      html  css  js  c++  java
  • 邮箱认证新用户注册,并用验证回传参数完成用户的注册

    邮箱认证新用户注册,也可用于重置密码

    第一部分:发送邮箱

    1.当用户注册完的时候,提示用户打开邮箱验证

    2.当用户填写信息后,用户信息插入数据库(ischeck设置为0 未验证),并发送邮件(内容用微信的方式进行拼接和回调参数)

     public static void SendMail(string smtpserver/*SMTP服务器smtp.qq.com*/, int enablessl/*是否启用SSL加密*/, string userName/*登录帐号*/,
                string pwd/*登录密码*/, string nickName/*昵称*/, string strfrom/*发件人*/, string strto/*收件人*/, string subj/*主题*/, string bodys/*内容*/)
            {
                SmtpClient smtpClient = new SmtpClient
                {
                    DeliveryMethod = SmtpDeliveryMethod.Network,
                    Host = smtpserver,
                    Credentials = new System.Net.NetworkCredential(userName, pwd)
                };
                if (enablessl == 1)
                {
                    smtpClient.EnableSsl = true;
                }
    
                MailAddress from = new MailAddress(strfrom, nickName);
                MailAddress to = new MailAddress(strto);
                MailMessage mailMessage = new MailMessage(from, to)
                {
                    Subject = subj,
                    Body = bodys,
                    BodyEncoding = System.Text.Encoding.Default,
                    IsBodyHtml = true,
                    Priority = MailPriority.Normal
                };
                smtpClient.Send(mailMessage);
            }
    

    例子用的是

    SMTP.qq.com服务器
    需要在qq邮箱里配置,打开qq邮箱-设置-账户-开启这2个服务

    普通qq邮箱是每天100封邮件,企业qq邮箱是每天500封,各种邮箱每天发送量不同

    额,可以申请N个免费邮箱,在用户表里设置往哪个邮箱发送,然后.......,额,不建议这样(—_—)

    第二部分:邮件的内容,其实就是一个带参数的url地址,当点击的时候,完成注册,邮件主体内容

    1. 将username(用户名)、timestamp(时间戳)、randrom(随机数)三个参数进行字典序排序 
    2. 将三个参数字符串拼接成一个字符串进行sha1加密
    3. 加密后的字符串与signature对比,标识该请求来源于邮箱回调函数
     public string Mailbody(string username, string randrom, DateTime dateTime)
            {
                string timestamp = DateTimeToUnixTimestamp(dateTime);
                string[] arrTmp = { username, timestamp,randrom};
                Array.Sort(arrTmp);     //字典排序
                string tmpStr = string.Join("", arrTmp);
                tmpStr = GetSha1(tmpStr).ToLower();
                return string.Format("{0}type=reg&uname={1}&signature={2}","www.xxx.com/reg",username,tmpStr);
            }
            public static string DateTimeToUnixTimestamp(DateTime dateTime)
            {
                var start = new DateTime(1970, 1, 1, 0, 0, 0, dateTime.Kind);
                return Convert.ToInt64((dateTime - start).TotalSeconds).ToString(CultureInfo.InvariantCulture);
            }
            public static string GetSha1(string pwd)
            {
                byte[] data = System.Text.Encoding.Default.GetBytes(pwd);//以字节方式存储
                System.Security.Cryptography.SHA1 sha1 = new System.Security.Cryptography.SHA1CryptoServiceProvider();
                byte[] result = sha1.ComputeHash(data);//得到哈希值
                return System.BitConverter.ToString(result).Replace("-", ""); //转换成为字符串的显示
            }
    

    第三部分,接收回调函数(与数据库的数据表校队)

    这一步关系凌乱(先做记录,待以后补全)

    string signature = HttpContext.Current.Request.QueryString["signature"];
    string type = HttpContext.Current.Request.QueryString["type"];

    string username = HttpContext.Current.Request.QueryString["username"];

    通过查找username和signature进行比较,是否一样,如果一样这个用户注册成功?

    第三部分逻辑有问题,先写到这。

    你将独自前行,你会遇到友好,也会遇到恶意,不管你多么善良,因为世间就是这样,不好,不坏.
  • 相关阅读:
    拼接带有汉字的html接口时应注意的问题
    引入第三方友盟分享出现的问题
    修改系统文件内容的经典错误总结
    实例变量 、 属性 、便利构造器、设置器、 访问器、实例方法("-") 、类方法("+"静态方法)、单例
    iOS开发 调用打电话,发短信
    UINavigationController的相关设置
    “商城项目”自定义搜索框
    下拉刷新,上拉加载更多
    NSArray数组随机排序
    面向对象概念
  • 原文地址:https://www.cnblogs.com/jsdvkm/p/4537113.html
Copyright © 2011-2022 走看看