C# 在Asp.Net中使用电子邮件发送忘记密码
我使用asp.net框架通过电子邮件发送忘记密码。 但我觉得我的代码有问题。 请帮忙。 单击按钮的事件代码如下所示C# 在Asp.Net中使用电子邮件发送忘记密码,c#,asp.net,sql-server,database,email,C#,Asp.net,Sql Server,Database,Email,我使用asp.net框架通过电子邮件发送忘记密码。 但我觉得我的代码有问题。 请帮忙。 单击按钮的事件代码如下所示 protected void frgtbtn_Click(object sender, EventArgs e) { string st = "select E_mail FROM registraion_master WHERE E_mail='" + Email.Text + "'";
protected void frgtbtn_Click(object sender, EventArgs e)
{
string st = "select E_mail FROM registraion_master WHERE E_mail='" + Email.Text + "'";
cmd = new SqlCommand(st, sqlcon);
cmd.Connection.Open();
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataSet ds=new DataSet();
sda.Fill(ds);
cmd.Connection.Close();
if(ds.Tables[0].Rows.Count > 0)
{
MailMessage email = new MailMessage();
email.From = new MailAddress(Email.Text); //Enter sender email address.
email.To.Add(Email.Text); //Destination Recipient e-mail address.
email.Subject = "Your Forget Password:"; //Subject for your request.
email.Body = "Hi,Your Password is: " + ds.Tables[0].Rows[0]["Pwd"] + "";
email.IsBodyHtml = true;
//SMTP SERVER DETAILS
SmtpClient smtpc = new SmtpClient("smtp.gmail.com");
smtpc.Port = 587;
smtpc.UseDefaultCredentials = false;
smtpc.EnableSsl = true;
gmail_ID.Text = "anuragdixit132@gmail.com";//Enter your gmail id here
gmail_pwd.Text="vineet";//Enter your gmail id here
smtpc.Credentials = new NetworkCredential(gmail_ID.Text,gmail_pwd.Text);
smtpc.Send(email);
string script = @"<script language=""javascript""> alert('Password Has Been Sent.......!!!!!.');
</script>;";
Page.ClientScript.RegisterStartupScript(this.GetType(), "myJScript1", script);
}
else
{
pwdlbl.Text = "This email address is not exist in our Database try again";
}
protectedvoid frgtbtn_单击(对象发送方,事件参数e)
{
string st=“从注册主机中选择电子邮件,其中电子邮件=”+Email.Text+”;
cmd=新的SqlCommand(st、sqlcon);
cmd.Connection.Open();
SqlDataAdapter sda=新的SqlDataAdapter(cmd);
数据集ds=新数据集();
sda.填充(ds);
cmd.Connection.Close();
如果(ds.Tables[0].Rows.Count>0)
{
MailMessage email=新的MailMessage();
email.From=新邮件地址(email.Text);//输入发件人电子邮件地址。
email.To.Add(email.Text);//目标收件人电子邮件地址。
email.Subject=“忘记密码:;//请求的主题。
email.Body=“您好,您的密码是:”+ds.Tables[0]。行[0][“Pwd”]+”;
email.IsBodyHtml=true;
//SMTP服务器详细信息
SmtpClient smtpc=新的SmtpClient(“smtp.gmail.com”);
smtpc.端口=587;
smtpc.UseDefaultCredentials=false;
smtpc.EnableSsl=true;
gmail_ID.Text=”anuragdixit132@gmail.com“;//在此处输入您的gmail id
gmail_pwd.Text=“vineet”//在此处输入您的gmail id
smtpc.Credentials=新的网络凭证(gmail_ID.Text,gmail_pwd.Text);
发送(电子邮件);
字符串脚本=@“警报('已发送密码……!!!!!);
;";
Page.ClientScript.RegisterStartupScript(this.GetType(),“MyJScript 1”,脚本);
}
其他的
{
pwdlbl.Text=“此电子邮件地址在我们的数据库中不存在,请重试”;
}
在此代码中:有一个异常occour:列“Pwd”不属于表。再现问题的最短方法是:
string st = "select E_mail FROM registraion_master WHERE E_mail='" + Email.Text + "'";
cmd = new SqlCommand(st, sqlcon);
cmd.Connection.Open();
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataSet ds=new DataSet();
sda.Fill(ds);
cmd.Connection.Close();
ds.Tables[0].Rows[0]["Pwd"];
很明显,您只针对电子邮件而不是Pwd查询db。如果Pwd是注册主表的一部分,则解决方案可以是:
string st = "select E_mail,Pwd FROM registraion_master WHERE E_mail='" + Email.Text + "'";
但是,我希望pwd不是以明文形式保存的。开始使用参数化查询时,您的查询会受到sql注入的影响。我猜在屏幕上显示用户输入时,您也会遇到跨站点脚本问题,在向用户发送密码时,您会遇到跨站点脚本问题…我怀疑您存储了您的密码密码是纯文本的。不要这样做!请阅读:你应该始终使用。这种字符串连接会受到攻击。难道不是很明显“Pwd”列不在表中吗?正如@SonerGönül所说,不要像那样存储密码哦,“Pwd”不在表中的原因很可能是因为你只得到
其中E_-mail='“+Email.text+”
)@AnuragDixit,其中说明列“Pwd”不属于table table,这意味着在数据集中,它是您的select语句的结果选择E\u mail FROM
。您只选择E\u mail,因此结果集中只存在E\u mail。如果是您自己的项目,这并不重要,但我仍然会推荐良好的做法。我希望不是这样您站点上的用户…修复sql注入和跨站点脚本。最好是在用户丢失旧密码时向他们发送新密码。