public async Task <IActionResult> Mail(string id) { string email = id; var message = new MimeMessage(); var builder = new BodyBuilder { TextBody = "Hello. It works." }; message.Body = builder.ToMessageBody(); message.Subject = "Test email"; message.To.Add(new MailboxAddress(name: null, address: email)); message.From.Add(SmtpClient.SystemFromAddress); try { await SmtpClient.SendMessageAsync(message); return(Content("OK. Check your inbox.")); } catch (Exception ex) { return(Content($"{ex.Message}\r\n\r\n{ex.StackTrace}")); } }
public async Task <IActionResult> Forgot(ForgotViewModel model) { //validate username exists //validate user is active //encode reset token //mail reset token var user = await DbContext.Users.Where(x => x.Name == model.Username).FirstOrDefaultAsync(); if (user == null) { ModelState.AddModelError("", "Please register before attempting to log in."); ModelState.AddModelError("Username", $"\"{model.Username}\" is not registered."); return(View(model)); } if (!user.Active) { ModelState.AddModelError("", $"\"{model.Username}\" is disabled. Please contact the administrator."); ModelState.AddModelError("Username", $"\"{ model.Username}\" is disabled."); return(View(model)); } var token = EncodeResetToken(user); var cryptoken = EncryptToken(token); var resetLink = Url.ActionLink("Reset", "Account", new { id = cryptoken }); var message = new MimeMessage(); message.From.Add(SmtpClient.SystemFromAddress); message.To.Add(new MailboxAddress((string?)null, user.Email)); message.Subject = "Password Reset Requested"; var builder = new BodyBuilder { //TODO: message tempate as txt and html part resource TextBody = "Follow the link below to reset your password in the TBD system. " + $"This reset link will expire {TokenValidMinutes} minutes after you requested it. " + "If you do not wish to reset your password, you can safely ignore this message.\n\n" + $"<{resetLink}>", HtmlBody = "<p>The link below will allow you to reset your password in the TBD system.</p>" + $"<p><a href={resetLink}>Follow this link to reset your password. It will " + $"expire {TokenValidMinutes} minutes after you requested it.</a></p>" + "<p>If you do not wish to reset your password, you can safely ignore this message.</p>" }; message.Body = builder.ToMessageBody(); try { await SmtpClient.SendMessageAsync(message); ViewBag.Message = $"We have sent you an email from {SmtpClient.SystemFromAddress.Address} that contains a link to reset your email. " + $"The link will expire in {TokenValidMinutes} minutes."; } catch (Exception e) { Logger.LogError(e, "Error sending email."); ModelState.AddModelError("", e.Message); } return(View(model)); }