一般来说,安全起见,现在的网站用户数据库中保存的密码信息都不是明码了,都保存经过编译的字段。那么一旦用户忘记了密码怎么办呢?这时候就需要“密码重置”功能了,给用户一个可认证的安全链接,让用户重新设置密码。结合密保注册邮箱,直接将重置密码的链接发送到邮箱是最方便的一种方案。我就用了.net发送邮件的功能。
先看代码:
using System.Net.Mail;
using System.Net;
///
/// 发送邮件
///
/// 目标邮箱
/// 发件人地址
/// 发件人姓名
/// 邮件标题
/// 邮件内容
public void sendMail(string addr, string srcaddr, string srcname, string title, string text)
{
MailAddress from = new MailAddress(srcaddr, srcname); //发件人信息,实际上这个是可以和发送邮箱不一致的,只是显示给收件人而已
MailMessage mail = new MailMessage();
//设置邮件的标题
mail.Subject = title;
//设置邮件的发件人
mail.From = from;
//设置邮件的收件人
// 如果要发送给多人,则循环多次Add
//mail.To.Add(new MailAddress("zhangsan@hotmail.com", "张三"));
mail.To.Add(addr);// 简单这样写也可以
//设置邮件的抄送收件人
//抄送多人也多次Add
//mail.CC.Add(new MailAddress("Lisi@hotmail.com", "李四");
//设置邮件的内容
mail.Body = text;
//设置邮件的格式
mail.BodyEncoding = System.Text.Encoding.UTF8;
mail.IsBodyHtml = true;
//设置邮件的发送级别
mail.Priority = MailPriority.Normal;
//最后创建Smpt客户端,发送,我最终用的是gmail的smpt服务器
SmtpClient client = new SmtpClient("smtp.gmail.com",587);//smpt服务器应该根据srcaddr来进行解析,我这儿直接这么写了。
client.Credentials = new NetworkCredential("abc@gmail.com", "abc");//邮箱地址,邮箱密码,这个密码必须是实际有用的才行
client.EnableSsl = true;
client.Send(mail);
}
编写代码过程非常简单,主要的困难在于实际测试的时候邮箱服务器的选择。我开始使用了QQ邮箱的smpt,包括去QQ邮箱开通smpt服务等等,最终都没有发送成功过,不知道什么原因。后来又测试21cn.com的smpt服务器,结果是运行中没有发生什么异常,可是目标邮箱很难收到邮件,延迟很多,而且测试很多次只有一个送达了。最后选用了gmail邮箱。
总结起来的话,写这样的功能,自身代码并不困难,更多的是外在条件的筛选。相信很多人也和我一样写了代码,却怎么也收不到发出去的邮件,苦想几天都不知道自己怎么就错啦。我要说的就是,换个邮箱再试试。