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# 向新注册用户发送验证电子邮件以激活其帐户_C#_Asp.net_Asp.net Mvc_Asp.net Web Api - Fatal编程技术网

C# 向新注册用户发送验证电子邮件以激活其帐户

C# 向新注册用户发送验证电子邮件以激活其帐户,c#,asp.net,asp.net-mvc,asp.net-web-api,C#,Asp.net,Asp.net Mvc,Asp.net Web Api,在asp。net web api我正在尝试向新注册用户发送确认邮件,这些用户在单击激活其帐户时有一个链接我已设法通过SmtpClient和NetworkCredential类发送电子邮件,但我不想使用identity 2。她是发送电子邮件的密码 public bool SendMail() { System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();

在asp。net web api我正在尝试向新注册用户发送确认邮件,这些用户在单击激活其帐户时有一个链接我已设法通过SmtpClient和NetworkCredential类发送电子邮件,但我不想使用identity 2。她是发送电子邮件的密码

public bool SendMail()
        {
            System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();

            string strMessageBody = MailBody;

            //System.Web.HttpContext.Current.Response.Write(strMessageBody);

            msg.To.Add(MailTo);

            if (MailCC != null && MailCC.Length > 0)
            {
                msg.CC.Add(MailCC); ;
            }
            if (MailBCC != null && MailBCC.Length > 0)
            {
                msg.Bcc.Add(MailBCC);
            }

            //msg.Sender = new System.Net.Mail.MailAddress(MailFrom);
            msg.From = new System.Net.Mail.MailAddress(MailFrom);
            msg.Subject = MailSubject;
            msg.Body = strMessageBody;
            msg.IsBodyHtml = true;

            //System.Net.Mail.SmtpClient objSmtpClient = new System.Net.Mail.SmtpClient(_strSMTPServer);
            //EmailContent c = (EmailContent)content;
            SmtpClient mailClient = new SmtpClient();
            NetworkCredential basicAuthenticationInfo = new NetworkCredential();
            basicAuthenticationInfo.UserName = ConfigurationManager.AppSettings["userName"].ToString();
            basicAuthenticationInfo.Password = ConfigurationManager.AppSettings["password"].ToString();
            mailClient.UseDefaultCredentials = false;
            mailClient.Credentials = basicAuthenticationInfo;
            mailClient.Host = ConfigurationManager.AppSettings["host"].ToString();
            mailClient.Port = Convert.ToInt32(ConfigurationManager.AppSettings["port"].ToString());
            mailClient.EnableSsl = true;
            System.Net.Mail.MailMessage mailmessage = msg;
            mailmessage.IsBodyHtml = true;
            mailClient.DeliveryMethod = SmtpDeliveryMethod.Network;
            mailmessage.SubjectEncoding = System.Text.Encoding.UTF8;
            mailmessage.BodyEncoding = System.Text.Encoding.UTF8;
            mailClient.Send(mailmessage);
            return true;

        }

在发送电子邮件之前,为用户创建身份验证令牌,并将其作为附加参数添加到激活链接。在该链接触发的操作中,您只需检查令牌并激活用户(如果正确),或者将令牌传递到登录视图,将其存储在隐藏字段中,并在发布后连同用户名和密码一起检查。就我个人而言,我更喜欢第二种选择

令牌可以通过几种方式生成。例如,通过创建用户提供的部分(或全部)数据的散列,如用户名+密码+注册日期。然后,在令牌的验证中,您可以检查它是否等于该用户存储在数据库中的令牌,或者(如果您不想存储它)在验证期间再次以这种方式生成的哈希。如果用户名+密码组合和令牌都正确,则可以将此用户的帐户设置为活动并允许登录


顺便说一句,您有两个类型为
System.Net.Mail.MailMessage
-
msg
MailMessage
的变量,我认为只使用一个就足够了。

隐藏字段应该在包含令牌的电子邮件正文中?