邮箱认证新用户注册,也可用于重置密码
第一部分:发送邮箱
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进行比较,是否一样,如果一样这个用户注册成功?
第三部分逻辑有问题,先写到这。