c# - 向新注册用户发送验证电子邮件以激活他们的帐户

标签 c# asp.net asp.net-mvc asp.net-web-api

在ASP.net web api 我正在尝试向新注册用户发送确认邮件,这些用户在单击时有一个链接激活他们的帐户我已经设法通过 SmtpClient 和 NetworkCredential 类发送电子邮件但是我将如何暗示激活部分我不想使用身份2. her是发送邮件的密码。

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;

        }

最佳答案

在发送电子邮件之前为用户创建身份验证 token 并将其作为附加参数添加到激活链接中。在该链接触发的操作中,您可以简单地检查 token 并在正确时激活用户,或者将 token 传递给登录 View ,将其存储在隐藏字段中,并在 POST 后与用户名和密码一起检查。就个人而言,我更喜欢第二种选择。

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

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

关于c# - 向新注册用户发送验证电子邮件以激活他们的帐户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24593785/

相关文章:

asp.net-mvc - 使用特定条件验证字符串字段的正则表达式

c# - Visual Studio 可以理解,但 Unity 不能?

c# - 限制 C# 字典中的值类型 :

c# - 线程通知另一个线程异常

c# - 有更好的方法吗? ASP.NET/C#/代码隐藏

asp.net - MSCharts “No http handler was found for request type ' GET'”错误

c# - asp.net c#中访问母版页的方法

asp.net-mvc - Html.Hidden 字段未设置

c# - 无法修改数据集

c# - 一次显示 DataAnnotation 和 IValidatableObject 的所有验证错误