Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Asp.Net中使用电子邮件发送忘记密码_C#_Asp.net_Sql Server_Database_Email - Fatal编程技术网

C# 在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 + "'";

我使用asp.net框架通过电子邮件发送忘记密码。 但我觉得我的代码有问题。 请帮忙。 单击按钮的事件代码如下所示

        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,然后不要使用它,以及在select子句中使用带有文本输入的非参数化查询……除了不将密码存储为纯文本外,还应该使用而不是使用字符串连接来构建sql字符串(
其中E_-mail='“+Email.text+”
)@AnuragDixit,其中说明列“Pwd”不属于table table,这意味着在数据集中,它是您的select语句的结果
选择E\u mail FROM
。您只选择E\u mail,因此结果集中只存在E\u mail。如果是您自己的项目,这并不重要,但我仍然会推荐良好的做法。我希望不是这样您站点上的用户…修复sql注入和跨站点脚本。最好是在用户丢失旧密码时向他们发送新密码。