C#实现发送邮件找回密码功能

首先我们来分析一下思路:

三步走:

1.先要发送邮件

2.让用户点击邮件里的URL

3.实现修改密码

1.为了保证安全性,需要生成发送到邮件的URL,主要参数(用户名,过期时间,key(key 需要在每次运行是自动生成随机码), IP等等)   然后将URL发送到邮箱。

2.保存发送的参数(建议保存在数据库)

3.解析url:首先根据用户名从数据库中查找出密钥key和过期时间,没有则表示该请求 是伪造的或者过期的,然后验证签名,验证过期时间,都验证通过,就可以修改密码, 密码修改完以后,删除数据库中的记录。

二、具体代码实现

分为发送邮箱页面和修改密码页面:
一.发送邮箱页面
string strUserName = txtUserName.Value.Trim();
string strEail = txtEmail.Value.Trim();
//生成随机密码
string rand = "";
Random ramPwd = new Random();
string pwd = ramPwd.Next(100000, 9999999).ToString();
rand = pwd;
string key = rand + strName + email + "Base";

if (!string.IsNullOrEmpty(strUserName) && !string.IsNullOrEmpty(strEail))
{
//发送邮件
StringBuilder sb = new StringBuilder();
sb.Append("亲爱的" + strUserName + "您好:<br/><br/>");
sb.Append("点击以下链接设置新密码。<br/><br/>");
sb.Append("<a href =\"http://www.xxxx.com/findpwd.aspx?key=" + key + "&time=" + time + "\">http://www.xxxx.com/findpwd.aspx?key=" + key + "&time=" + time + " </a><br/><br/>");
sb.Append("(如果无法点击该URL链接地址,请将它复制并粘帖到浏览器的地址输入框,然后单击回车即可。)<br/><br/>");
sb.Append("注意:请您在收到邮件24小时内使用,否则该链接将会失效。<br/><br/>");
sb.Append("我们将一如既往、热忱的为您服务!<br/><br/>");
string MessageBody = sb.ToString();
Sends(strEail, "[email protected]", "xxxx--找回密码", MessageBody, "123456");

//向find_password_log表添加数据
AddFindPassword(strUserName, strEail,key);

Response.Write("<script>alert(‘邮件已发送到你的邮箱,请注意查收!‘);location.href=‘/‘;</script>");

}
}

//向表find_password_log中添加数据
private void AddFindPassword(string strName, string email, string key)
{
//向find_password_log表中插入随机生成的密码(MD5加密) ,时间,IP
SummerBase.BLL.find_password_log bllFind = new SummerBase.BLL.find_password_log();
SummerBase.Model.find_password_log modelFind = new SummerBase.Model.find_password_log();
if (modelFind != null)
{
modelFind.Md5 = MFunction.Md5New(key).ToString();
modelFind.CreateTime = SummerBase.Utils.Util.TimeToUnixTimes(DateTime.Now.ToString());
modelFind.IP = Page.Request.UserHostAddress;

time = modelFind.CreateTime;
key = modelFind.Md5;
}
bllFind.Add(modelFind);

}

//发送邮件代码
public static void Sends(string email, string formto, string content, string body, string upass)
{
string name = "[email protected]";

string smtp = "smtp.exmail.sina.com";

SmtpClient _smtpClient = new SmtpClient();
_smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;//指定电子邮件发送方式
_smtpClient.Host = smtp; //指定SMTP服务器
_smtpClient.Credentials = new System.Net.NetworkCredential(name, upass);//用户名和密码
MailMessage _mailMessage = new MailMessage();
//发件人,发件人名
_mailMessage.From = new MailAddress(formto, "xxxx公司");
//收件人
_mailMessage.To.Add(email);
_mailMessage.SubjectEncoding = System.Text.Encoding.GetEncoding("gb2312");
_mailMessage.Subject = content;//主题

_mailMessage.Body = body;//内容
_mailMessage.BodyEncoding = System.Text.Encoding.GetEncoding("gb2312");//正文编码
_mailMessage.IsBodyHtml = true;//设置为HTML格式
_mailMessage.Priority = MailPriority.High;//优先级
try
{
_smtpClient.Send(_mailMessage);
}
catch (Exception)
{

}
}

二、修改密码

根据接受的参数和数据中添加的参数进行比较,如果验证通过,就修改密码,如果验证失败则给出提示,重新发送邮件。

具体参数讲解:
public void SendSMTPEMail(string strSmtpServer, string strFrom, string strFromPass, string strto, string strSubject, string strBody)
{
System.Net.Mail.SmtpClient client = new SmtpClient(strSmtpServer);
client.UseDefaultCredentials = false;
client.Credentials =
new System.Net.NetworkCredential(strFrom, strFromPass);
client.DeliveryMethod = SmtpDeliveryMethod.Network;

System.Net.Mail.MailMessage message =
new MailMessage(strFrom, strto, strSubject, strBody);
message.BodyEncoding = System.Text.Encoding.UTF8;
message.IsBodyHtml = true;
client.Send(message);
}
第一个参数如果是163邮箱就写smtp.163.com
第二个参数发件人的帐号
第三个参数发件人密码
第四个参数收件人帐号
第五个参数主题
第六个参数内容.

发送邮箱,主要是调用了一个方法:

public void SendSMTPEMail(string strSmtpServer, string strFrom, string strFromPass, string strto, string strSubject, string strBody) {

//简单邮件传输协议(simple mail transfer protocol)SMTP(简单邮件传输协议)是3Gpp多媒体消息规范中业务互通接口MM4使用的承载协议

//目前在网内多媒体消息业务系统的部署中都使用了该接口的承载协议

System.Net.Mail.SmtpClient client = new SmtpClient(strSmtpServer);

client.UseDefaultCredentials = false;//是否随请求一起发送

client.Credentials = new System.Net.NetworkCredential(strFrom, strFromPass);//获取或设置验证发件人的身份的凭据

client.DeliveryMethod = SmtpDeliveryMethod.Network;//指定如何处理待发的邮件t//电子邮件通过网络发送到SMTP服务器

System.Net.Mail.MailMessage message = new MailMessage(strFrom, strto, strSubject, strBody); //表示说程序可以使用

//--System.Net.Mail.SmtpClient(表示应用程序可以使用简单邮件传输协议来发送í电子邮件)的类发送电子邮件

message.BodyEncoding = System.Text.Encoding.UTF8;//设置邮件编码为字符编码

message.IsBodyHtml = true;//设置指示邮件正文的值是否为Html格式的值

client.Send(message);//将指定的邮件发送到STMP服务器以便传递

}

涉及参数讲解:

// 第一个参数如果是163邮箱就写smtp.163.com ,使用的服务 string strSmtpServer = "smtp.qq.com";

//发件人账号 string strFrom = "[email protected]";

//发件人密码 string strFromPass = "chen15993920970";

//给谁发 string strto = "[email protected]";

//所发主题 string strSubject = "哼哼";

//所发内容 string strBody = "您的验证码是:" + yanzhengma;

原文地址:https://www.cnblogs.com/zpyplan/p/9573665.html

时间: 2024-12-14 10:33:52

C#实现发送邮件找回密码功能的相关文章

找回密码功能的实现(考虑安全性,加密方面)

最近负责公司的登陆与注册模块,大部分已经实现了,这找回密码功能实现的思路是这样的 1.用户忘记密码,需要找回密码 2.后台通过一系列的加密处理,将通过后台邮件将重置密码的页面发送到该用户的邮箱 3.用户通过邮箱里烦人链接就可以重置密码. 以下是代码 /* ------------------------------------------忘记密码,发送邮件------------------------------------------------- */ //找回密码发送邮件功能 @Requ

网站开发之用户重设密码 找回密码功能的实现原理

网站开发之用户重设密码 找回密码功能的实现原理,这个东西基本在现在每个系统中都带有的功能,但是实现的方式也是挺多的,这个是跟数据库没多大关系的方法嘞. 用户流程: 1.用户忘记密码,来到密码重设界面 2.用户输入Email地址,点击重设密码按钮 3.用户收到一封密码重设邮件,里面有重设密码的链接,此链接有过期时间 4.用户点击链接,来到密码重设页面,输入新密码,完成 这个流程并没有什么创新,很多网站都是用这套流程 后端实现方式: 1.当用户输入Email地址后,验证这个Email,如果存在于数据

PHP会员找回密码功能实现实例介绍

设置思路 1.用户注册时需要提供一个E-MAIL邮箱,目的就是用该邮箱找回密码. 2.当用户忘记密码或用户名时,点击登录页面的“找回密码”超链接,打开表单,并输入注册用的E-MAIL邮箱,提交. 3.系统通过该邮箱,从数据库中查找到该用户信息,并更新该用户的密码为一个临时密码(比如:12345678). 4.系统借助Jmail功能把该用户的信息发送到该用户的邮箱中(内容包括:用户名.临时密码.提醒用户及时修改临时密码的提示语). 5.用户用临时密码即可登录. HTML 我们在找回密码的页面上放置

SpringMVC通过邮件找回密码功能的实现

1.最近开发一个系统,有个需求就是,忘记密码后通过邮箱找回.现在的系统在注册的时候都会强制输入邮箱,其一目的就是 通过邮件绑定找回,可以进行密码找回.通过java发送邮件的功能我就不说了,重点讲找回密码. 2.参考别人的思路:发送邮件→请求邮件里的URL→验证url→{验证成功修改密码,不成功跳转到失败页面} 重点就是如何生成这个url和如何解析这个url. 需要注意的是一个url只能修改一次密码,当同一帐号发送多封邮件,只有最后一封邮件的url 3.加密能防止伪造攻击,一次url只能验证一次,

简述邮箱找回密码功能

1. 在登录页面给个链接,在找回密码界面可以输入邮箱地址和验证码,验证码是为了防止恶意找回: 2. 后台,首先判断验证码是否正确,再判断该邮箱是否注册过用户; 3. 如果该邮箱存在,检索出该用户信息; 4. 如果你的密码没有MD5加密的话,可以直接查询出密码,如果MD5加密了,只能重新生成一个密码,并修改该用户: 5. 将新生成的密码发送到用户邮箱里,用JavaMail发送邮件;

用户找回密码功能JS验证邮箱通过点击下一步隐藏邮箱输入框并修改下一步按钮的ID

//这里是BaseDao 1 /** 2 * 获得一个对象 3 * @param hql 4 * @param param 5 * @return 6 */ 7 public Object get(String hql, Object[] param){ 8 List<Object> objects = this.getHibernateTemplate().find(hql, param); 9 if (objects != null && objects.size() &g

Jsp邮件找回密码全攻略

[来源网络  http://www.2cto.com/kf/201502/376374.html] 一般大型网站我们登录的时候,密码忘了都有个功能可以找回密码. 细数下大致的方法: 1.直接把密码发送到你的邮箱去.一般是临时密码. 2.短信验证,成本较高. 3.密保问题 4.发送一个链接到你邮箱点击即可更改密码. 个人认为第四种方法最经济实惠,这次也主要都是在搞这个. 搞了一个晚上,单单邮件发送功能写了快300行,虽然很多是注释和空格,被舍友一说,用python只写了20几行,不禁膜拜PYTHO

Java实现邮箱找回密码

[来源网络:http://www.cnblogs.com/zyw-205520/p/3738439.html] 通过邮件找回密码功能的实现 1.最近开发一个系统,有个需求就是,忘记密码后通过邮箱找回.现在的系统在注册的时候都会强制输入邮箱,其一目的就是 通过邮件绑定找回,可以进行密码找回.通过java发送邮件的功能我就不说了,重点讲找回密码. 2.参考别人的思路:发送邮件→请求邮件里的URL→验证url→{验证成功修改密码,不成功跳转到失败页面} 重点就是如何生成这个url和如何解析这个url.

php+jQuery+Mysql找回密码----ThinkPHP

最近用ThinkPHP做了一个邮箱找回密码功能,在遭遇了N个bug之后终于做成了,下面分享一下邮箱找回密码功能的实现: 邮箱找回密码实际上就是在用户通过验证之后重置密码的过程,一般开发者会在验证用户信息后通过程序生成一个新密码 或者生成一个特定的链接并发送邮件到用户邮箱,用户从邮箱链接到网站的重置密码模块重新设置新密码. 一般步骤是: 1.表单输入注册时的邮箱: 2.验证用户邮箱是否正确,如果用户邮箱不存在网站的用户表中,则提示用户邮箱未注册: 3.发送邮件,如果用户邮箱确实存在用户表中,则组合