C# 如何在asp.net mvc中发送确认电子邮件

C# 如何在asp.net mvc中发送确认电子邮件,c#,asp.net-mvc,email,C#,Asp.net Mvc,Email,今天我试着跟随这篇文章,当我完成它时,createStatus返回invalidAnswer 这是我的注册行动 [HttpPost] [AllowAnonymous] [CaptchaValidation("CaptchaCode", "registerCaptcha", "Wrong captcha!")] public ActionResult Register(RegisterModel model) { if (ModelState.IsV

今天我试着跟随这篇文章,当我完成它时,createStatus返回invalidAnswer 这是我的注册行动

[HttpPost]
    [AllowAnonymous]
    [CaptchaValidation("CaptchaCode", "registerCaptcha", "Wrong captcha!")]
    public ActionResult Register(RegisterModel model)
    {
        if (ModelState.IsValid)
        {
            MembershipCreateStatus createStatus;
            Membership.CreateUser(model.UserName, model.Password, model.Email, null, null, false, null, out createStatus);
            if (createStatus == MembershipCreateStatus.Success)
            {
                MailHelper.SendConfirmationEmail(model.UserName);
                return RedirectToAction("Confirmation", "User");
            }
            else
            {
                ModelState.AddModelError("", "Failed!");
            }
        }
        return View(model);

    }
这是我的RegisterModel.cs

    public class RegisterModel
{
    [Key]
    public long ID { set; get; }     
    [Required(ErrorMessage = "Do not Skip this")]
    public string UserName { set; get; }
    [StringLength(500, MinimumLength = 6, ErrorMessage = "Atleast 6 characters in passwords")]
    [Required(ErrorMessage = "Do not Skip this")]
    public string Password { set; get; }
    [Compare("Password", ErrorMessage = "Wrong confirm passwords")]
    [Required(ErrorMessage = "Do not skip this")]
    public string ConfirmPassword { set; get; }
    public string Name { set; get; }
    public string Address { set; get; }
    [RegularExpression(@"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z", ErrorMessage = "This is not an email")]
    public string Email { set; get; }
    public string Phone { set; get; }
    public bool EmailConfirm { set; get; } 

}

对我的任何建议,我都非常感谢你们的帮助。

你们能做的最简单的事情是:

  • 首先,您应该在您的用户模型中定义一个属性,该属性将保存电子邮件确认令牌。此外,您应该定义属性
    bool isemailconfirm
    ,该属性默认为
    false
  • 令牌应该类似于自动生成的随机字符串。例如Guid.NewGuid().ToString()
  • 然后,您应该定义另一个操作,例如
    [HttpGet,AllowAnonymous]ConfirmEmail(字符串电子邮件,字符串令牌)
    ,它将根据保存在数据库中的令牌验证该令牌,并相应地更新
    IsEmailConfirmed
  • 然后,你要询问的链接应该指向一个类似这样的url:
    http://YOUR.SERVER/YourController/ConfirmEmail?email={0}&token={1}
    ,其中
    {0}
    是用户电子邮件,
    {1}
    是用户电子邮件确认令牌。它应该返回一个视图,告知确认是否成功

但是,我不建议重新发明轮子,而只是简单地使用它,它将为您完成所有authn&authz工作。

您可以做的最简单的事情是:

  • 首先,您应该在您的用户模型中定义一个属性,该属性将保存电子邮件确认令牌。此外,您应该定义属性
    bool isemailconfirm
    ,该属性默认为
    false
  • 令牌应该类似于自动生成的随机字符串。例如Guid.NewGuid().ToString()
  • 然后,您应该定义另一个操作,例如
    [HttpGet,AllowAnonymous]ConfirmEmail(字符串电子邮件,字符串令牌)
    ,它将根据保存在数据库中的令牌验证该令牌,并相应地更新
    IsEmailConfirmed
  • 然后,你要询问的链接应该指向一个类似这样的url:
    http://YOUR.SERVER/YourController/ConfirmEmail?email={0}&token={1}
    ,其中
    {0}
    是用户电子邮件,
    {1}
    是用户电子邮件确认令牌。它应该返回一个视图,告知确认是否成功

但是,我不建议重新发明轮子,而只是简单地使用它,它将为您完成所有的authn&authz工作。

请遵循ASP.Net网站上的以下示例,它漂亮地解释了如何在注册过程中发送电子邮件

此外,我不建议使用MD5密码哈希,因为它非常旧,请尝试使用SHA256哈希进行密码加密。

请遵循ASP.Net网站的以下示例,该网站完美地解释了如何在注册过程中发送电子邮件

此外,我不建议使用MD5密码哈希,因为它非常旧,请尝试使用SHA256哈希进行密码加密。

你在谈论什么样的身份?你在谈论什么样的身份?扎夫,谢谢你指出这一点。我已经编辑了内容,因为hashingMD5不再被认为是安全的,不应该在新作品中使用,而是使用SHA256。如果您不需要全部32个字节,只需使用所需的数字,所有字节都是随机的。感谢您指出这一点。我已经编辑了内容,因为hashingMD5不再被认为是安全的,不应该在新作品中使用,而是使用SHA256。如果您不需要全部32个字节,只需使用所需的数字,所有字节都是随机的。您好,先生,当我一直在努力发送确认电子邮件时,能否再次请求您的帮助我遇到的问题是,您能否帮我弄清楚为什么createStatus return invalidAnswer,如果您需要查看更多来自模型或控制器的代码,我可以向您展示,非常感谢您好,先生,当我一直在努力发送确认电子邮件时,我是否可以再次请求您的帮助我遇到的问题是,您能否帮我弄清楚为什么createStatus return invalidAnswer,如果您需要从模型或控制器中查看更多代码,我可以向您展示,非常感谢