private async Task SendOutbidNoticeAsync(Event evt, Product product, Bid previousBid, Bid highBid) { try { var subject = $"[{evt.Name}] You've been outbid on {product.Name}"; var messageModel = new OutbidNoticeModel { EventId = evt.Id, EventName = evt.Name, EventEndDate = evt.EndOn, ProductId = product.Id, ProductName = product.Name, UserName = previousBid.User.FullName, OutbidTime = highBid.Timestamp, OutbidAmount = previousBid.Amount, NewHighBidAmount = highBid.Amount }; var messageBody = await _viewRenderer.RenderViewToStringAsync("EmailTemplates/OutbidNotice", messageModel); await _emailSender.SendEmailAsync(previousBid.User.Email, subject, messageBody); } catch (Exception ex) { _logger.LogError(ex, "Error sending outbid notice for product ID {productId}", previousBid.ProductId); } }
public async Task CanRenderConfirmationMail() { // arrange var confirmationUrl = $"http://example.com/user/{Guid.NewGuid()}/confirm/{Guid.NewGuid()}"; // act var renderedView = await viewRenderer.RenderViewToStringAsync("~/emails/ConfirmEmail.cshtml", confirmationUrl); // assert testOutputHelper.WriteLine(renderedView); Assert.NotNull(renderedView); Assert.Contains(confirmationUrl, renderedView, StringComparison.OrdinalIgnoreCase); }
public async Task <IActionResult> EmailItinerary(int eventId) { var evt = await _dbContext.Events.FindAsync(eventId); if (evt == null) { return(NotFound()); } var user = await _userManager.GetUserAsync(User); try { var model = new EventItineraryEmailModel(); model.Event = evt.ToModel(); model.User = user.ToModel(); model.Sections = await _dbContext.Sections .Where(x => x.EventId == evt.Id) .OrderBy(x => x.StartOn) .ProjectTo <SectionModel>() .ToListAsync(); var userSessionIds = await _dbContext.Registrations .Where(x => x.EventId == eventId && x.UserId == user.Id) .Select(x => x.SessionId) .ToListAsync(); model.RegisteredSessions = await _dbContext.Sessions .Where(x => userSessionIds.Contains(x.Id)) .ProjectTo <SessionModel>() .ToListAsync(); model.ItineraryUrl = Url.Action("EventItinerary", "Itinerary", new { eventId }, Request.Scheme); model.EventUrl = Url.Action("Details", "Events", new { slug = evt.Slug }, Request.Scheme); var subject = $"Your {evt.Name} itinerary"; var body = await _viewRenderer.RenderViewToStringAsync("Itinerary/ItineraryEmail", model); await _emailSender.SendEmailAsync(user.Email, subject, body); return(Json(null)); } catch (Exception ex) { _logger.LogError(0, ex, $"Error sending itinerary email to '{user.Email}' for event '{evt.Name}'"); return(StatusCode((int)HttpStatusCode.InternalServerError, "Error sending itinerary email")); } }
public async Task <string> ToHtmlString(IViewRenderer viewRenderer) => await viewRenderer.RenderViewToStringAsync(this);