p; string smtpServer = ConfigurationManager.AppSettings["SmtpServer"];
string smtpFrom = ConfigurationManager.AppSettings["SmtpFrom"];
string smtpUserName = ConfigurationManager.AppSettings["SmtpUserName"];
string smtpPassword = ConfigurationManager.AppSettings["SmtpPassword"];
MailMessage mailObj = new MailMessage();
mailObj.IsBodyHtml = true;
//from:abc@qq.com
mailObj.From = new MailAddress(smtpFrom); //发送人邮箱地址
mailObj.To.Add(toEmail); //收件人邮箱地址
mailObj.Subject = subject; //主题
mailObj.Body = body; //正文
SmtpClient smtp = new SmtpClient();//通过.Net内置的SmtpClient类和邮件服务器进行通讯,发送邮件。
//是和发邮件方的smtp通讯,由发邮件方的邮件服务器和收邮件方的邮件服务器通讯进行邮件的转接。
smtp.Host = smtpServer; //smtp服务器名称
smtp.UseDefaultCredentials = true;
smtp.Credentials = new NetworkCredential(smtpUserName, smtpPassword); //发送人的登录名和密码
smtp.Send(mailObj);
}
关于邮箱的账号和密码最好配置到配置文件中。为了安全。
好好思考一下这样写的缺陷在哪?不仅有缺陷而且还有安全问题,有哪些安全问题?如果用户量大的话这样设计是否合理?会对什么有压力?如果不合理该如何优化?
首先我们来分析一下:
上面的方法是在用户表的基础上再增加一个字段,用来存激活码。这样合理吗?
由于激活码只用一次,所以在用户表的基础上再增加一个字段会麻烦一下,之前的功能会有影响。那到底该怎么解决比较好?
这时候Redis的好处就非常明显了,key-value数据库,并且还能设置数据的有效时间,很好的解决了上面遇到的问题,只需要改动上面很少的一部分代码就可以实现想要的功能。
代码如下:
如果到这里真的就OK了吗?大家可以想想为什么我要添加下面的这段代码:
下面关于Redis的文章您也可能喜欢,不妨参考下: