微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何发送确认电子邮件回复? MVC核心

如何解决如何发送确认电子邮件回复? MVC核心

我一直在尝试找出在用户登录时发送确认电子邮件的最简单方法

我正在使用 MailKit 和 Mailtrap.io(sqlite 和 EF)。 下面我有一个我这样做的方式的例子,我可以将它复制到我的用户控制器上,就像我在下面创建它的方式一样。

我的 ServiceDb 看起来像这样:

public bool SendMail(string name,string email,string subject,string body)
    {
        var mailMessage = new MimeMessage();
        mailMessage.From.Add(new MailBoxAddress("TheMailTrap","manager@TheMailTrap.com"));
        mailMessage.To.Add(new MailBoxAddress(name,email));
        mailMessage.Subject = subject;
        mailMessage.Body = new TextPart("plain")
        {
            Text = body
        };

        try
        {
            var smtpClient = new SmtpClient();
            smtpClient.Connect("smtp.mailtrap.io",2525,SecureSocketoptions.StartTls);
            smtpClient.Authenticate("61618d4d83c43242344d","b5be3640923423434342f2afa"); // replace with your mailtrap.io credentials
            smtpClient.Send(mailMessage);
            smtpClient.disconnect(true);
            return true;
        }
        catch (Exception)
        {
            return false;
        }
    }

我的患者控制器:

public IActionResult Create(Patient u)
    {
        if (svc.IsDuplicateEmailPatient(u.EmailAddress,u.Id))
        {
            //alerting the user that the email address is in use

            ModelState.AddModelError(nameof(u.EmailAddress),"The Email is already in use");
        }


        //Complete POST action and add the user 

        if (ModelState.IsValid)
        {
            svc.AddPatient(u);

            // send patient an email to confirm account. Add whatever message you want
            if (!svc.SendMail(u.Name,u.EmailAddress,"New Account","THIS IS A TEST!!!! :D "))
            {
                Alert("Email Not Sent",AlertType.warning);
            }
            else
            {
                Alert("User Was Created. Email sent",AlertType.success); //alert successful
            }

            return RedirectToAction(nameof(Index));

  

        }

        return View(u); // Return if validation errors has occured 
    }

我正在查看有关如何执行此操作的在线教程,但这与我所学到的实现此操作的方式大不相同。我基本上想确保当有人注册到特定角色时,我希望他们在经理“批准”之前等待 - 以确保他们注册的角色是真实的!

但是,例如,如果他们注册为患者,则会发送确认电子邮件,他们可以自行确认。

有人知道最干净的方法吗? - 我的编码水平是初学者,我一直在寻找我认为可行的方法然后失败。

在我的 Startup.cs 中,我已经实现了身份:

services.AddIdentity<User,IdentityRole>(opt =>
 {
  opt.Password.requiredLength = 7;
  opt.Password.requiredigit = false;
  opt.Password.RequireUppercase = false;

  opt.User.RequireUniqueEmail = true;

opt.SignIn.RequireConfirmedEmail = true;
 });

据我所知,这看起来必须实施!

我的用户控制器如下所示:

[HttpPost]
    [ValidateAntiForgeryToken]
    public IActionResult Register([Bind("Name,Email,Password,PasswordConfirm,Role")] UserRegisterviewmodel m)       
    {
        if (!ModelState.IsValid)
        {
            return View(m);
        }
        // add user via service
        var user = _svc.AddUser(m.Name,m.Email,m.Password,m.Role);
        // check if error adding user and display warning
        
        if (user == null) {
            Alert("There was a problem Registering. Please try again",AlertType.warning);
            return View(m);
        }

       

        Alert("Successfully Registered. Now login",AlertType.info);

        return RedirectToAction(nameof(Login));


    }

我的模型用户

 public enum Role { Admin,Manager,Guest }

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public string Password { get; set; }

    // User role within application
    public Role Role { get; set; }

    // used to store jwt auth token 
    public string Token { get; set; }
}

我从我在患者控制器中所做的事情知道我可以复制发送的电子邮件,但我不知道如何获得要发送的确认电子邮件

我确实看到有些人在控制器中使用用户管理器,我应该有这样的东西吗? //私有只读 UserManager _userManager;

我对这个完全迷失了。我确实尝试过很长时间:https://s3.amazonaws.com/recaffeinate-files/LittleAspNetCoreBook.pdf - 这是 .Net 上的教程,但我对此不知所措。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。