Skip to main content
 首页 » 编程设计

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

2024年01月24日33tuyile006

今天我正在尝试关注 Shai Raiten's Blog 的这篇文章当我完成它时,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; }  
 
} 

对我的任何建议,非常感谢你们提供的所有帮助。

请您参考如下方法:

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

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

但是,我建议不要重新发明轮子,而只是使用 Asp.Net Identity 2.0 framework ,它将为您完成所有 authn 和 authz 的工作。