C# 通过电子邮件发送的密码重置链接

C# 通过电子邮件发送的密码重置链接,c#,asp.net-core-mvc,C#,Asp.net Core Mvc,创建将发送到电子邮件的验证链接以执行密码交换的最佳方法是什么?我已经有了所有的发送逻辑工作,但是我需要添加这个链接,它将被重定向到一个视图(重新定义CAOSENHA)来更改密码 遵循运输方式 public void EnviarEmail() { try { //From Address string FromAddress = _config.GetValue&l

创建将发送到电子邮件的验证链接以执行密码交换的最佳方法是什么?我已经有了所有的发送逻辑工作,但是我需要添加这个链接,它将被重定向到一个视图(重新定义CAOSENHA)来更改密码

遵循运输方式

public void EnviarEmail()
        {
            try
            {
                //From Address  
                string FromAddress = _config.GetValue<string>("From");
                string FromAdressTitle = "TesteEnvio";
                //To Address  
                string ToAddress = CliEmail;
                string ToAdressTitle = "Microsoft ASP.NET Core";
                string Subject = "Redefinição de senha";//Assunto,
                string BodyContent = "Prezado(a)  para redefinir sua senha, por favor clique no link abaixo.";

                //Smtp Server  
                string SmtpServer = _config.GetValue<string>("SmtpServer");
                //Smtp Port Number  
                int SmtpPortNumber = _config.GetValue<Int32>("Port");

                var mimeMessage = new MimeMessage();
                mimeMessage.From.Add(new MailboxAddress(FromAdressTitle, FromAddress));
                mimeMessage.To.Add(new MailboxAddress(ToAdressTitle, ToAddress));
                mimeMessage.Subject = Subject;
                mimeMessage.Body = new TextPart("plain")
                {
                    Text = BodyContent

                };

                using (var client = new SmtpClient())
                {
                    client.Connect(SmtpServer, SmtpPortNumber, false);   
                    client.Authenticate(_config.GetValue<string>("Usuario"), _config.GetValue<string>("Password"));
                    client.Send(mimeMessage);
                    client.Disconnect(true);
                }
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }
public void enviemail()
{
尝试
{
//发件人地址
string FromAddress=_config.GetValue(“From”);
字符串fromAddressTitle=“TesteEnvio”;
//解决
字符串ToAddress=CliEmail;
字符串toAddressTitle=“Microsoft ASP.NET核心”;
字符串Subject=“重新定义塞纳”//assto,
string BodyContent=“Prezado(a)para重新定义sua senha,por four group no link abaixo。”;
//Smtp服务器
字符串SmtpServer=_config.GetValue(“SmtpServer”);
//Smtp端口号
int SmtpPortNumber=_config.GetValue(“端口”);
var mimeMessage=new mimeMessage();
mimeMessage.From.Add(新邮箱地址(fromAddressTitle,FromAddress));
mimeMessage.To.Add(新邮箱地址(ToAddressTitle,ToAddress));
mimessage.Subject=Subject;
mimeMessage.Body=新文本部分(“普通”)
{
文本=正文内容
};
使用(var client=new SmtpClient())
{
client.Connect(SmtpServer,SmtpPortNumber,false);
Authenticate(_config.GetValue(“Usuario”)、_config.GetValue(“Password”);
client.Send(mimessage);
client.Disconnect(true);
}
}
捕获(例外情况除外)
{
掷骰子;
}
}

您可以使用ASP.NET Identity framework。它将为您处理重置密码令牌生成

诸如此类:

var code = await UserManager.GeneratePasswordResetTokenAsync(userId);
var callbackUrl = Url.Action(
    "ResetPassword", 
    "Account", 
    new { UserId = userId, code = code }, protocol: Request.Url.Scheme);       
您可以在此处找到更多信息:


您可以使用ASP.NET Identity framework。它将为您处理重置密码令牌生成

诸如此类:

var code = await UserManager.GeneratePasswordResetTokenAsync(userId);
var callbackUrl = Url.Action(
    "ResetPassword", 
    "Account", 
    new { UserId = userId, code = code }, protocol: Request.Url.Scheme);       
您可以在此处找到更多信息:


旁注:更改
抛出ex
抛出。这样可以确保保留原始堆栈跟踪,保持现在的状态将使异常更难在以后的调用堆栈中调试。@Igor或者如果不打算对异常执行任何操作,只需删除try/catch即可。旁注:Change
throw ex
抛出。这可确保保留原始堆栈跟踪,保持现在的状态将使异常更难在以后的调用堆栈中调试。@如果不打算对异常执行任何操作,可以使用Igor或干脆删除try/catch。