public async Task <bool> SendUserLinkEmail(UserLinkEmail userLinkModel) { var emailTemplate = await GetEmailTemplate(Templates.UserLink).ConfigureAwait(false); // use model reply to address emailTemplate.ReplyToAddress = userLinkModel.ReplyToAddress; emailTemplate.ReplyToName = userLinkModel.ReplyToName; await SendTemplate(emailTemplate, userLinkModel).ConfigureAwait(false); return(true); }
private async Task SendRecipientLinkEmail(UserLinkModel userLinkModel, IPrincipal principal, string recipient, CancellationToken cancellationToken) { // lookup user var recipientUser = await _userManager.FindByEmailAsync(recipient); if (recipientUser == null) { Logger.LogError("Recipient '{recipient}' not found, can't send email", recipient); return; } // create user link var createModel = new LinkTokenCreateModel { Expires = DateTimeOffset.UtcNow.AddMonths(1), Url = userLinkModel.LinkUrl, UserName = recipientUser.UserName, TenantId = _userClaimManager.GetTenantId(principal) }; // create user token var token = _userManager.GenerateNewAuthenticatorKey(); var createCommand = new LinkTokenCreateCommand(principal, createModel, token); var linkToken = await Mediator.Send(createCommand, cancellationToken).ConfigureAwait(false); var scheme = _urlHelper.ActionContext?.HttpContext?.Request?.Scheme ?? "http"; // create link to send in email var emailLink = _urlHelper.Page( "/Account/Link", pageHandler: null, values: new { token }, protocol: scheme); // create email model var email = new UserLinkEmail { RecipientName = recipientUser.DisplayName, RecipientAddress = recipientUser.Email, ReplyToName = userLinkModel.ReplyToName, ReplyToAddress = userLinkModel.ReplyToAddress, Subject = userLinkModel.Subject, TextBody = userLinkModel.TextBody, HtmlBody = userLinkModel.HtmlBody, LinkUrl = emailLink, LinkText = userLinkModel.LinkText }; Logger.LogInformation("Sending user link email to '{recipient}'", recipient); await EmailTemplate.SendUserLinkEmail(email).ConfigureAwait(false); }