public async Task <FormElementActionResponse> PerformElementActionAsync(long tenantId, long elementId, FormElementActionRequest request, IPageContext context) { // Get form settings, domain and current page details FormElementSettings settings = await _elementRepository.ReadElementSettingsAsync(tenantId, elementId); Page page = await _pageService.ReadPageAsync(tenantId, context.PageId); WebDomain domain = await _domainService.ReadDomainByRedirectUrlAsync(tenantId, null); Tenant tenant = await _tenantService.ReadTenantAsync(tenantId); // Construct email IEnumerable <FormFieldLabelValue> labelValues = GetFormFieldLabelValues(settings, request); EmailContent content = GetEmailContent(page, labelValues); Email email = GetEmail(tenant, domain, page, settings, content); // Send finished email _emailService.Send(email); // Return response return(new FormElementActionResponse { Message = settings.SubmittedMessage }); }
private Email GetEmail(Tenant tenant, WebDomain domain, Page page, FormElementSettings settings, EmailContent content) { // Get to recipients IEnumerable <EmailAddress> toAddresses = GetEmailAddresses(new string[] { "\r\n", "\n" }, settings.RecipientEmail); IEnumerable <EmailAddress> configurationToAddresses = _emailService.ListToEmailAddresses(); if (configurationToAddresses != null) { toAddresses.Concat(configurationToAddresses); } // Get from (and reply to) email address string host = GetHost(domain.Url); EmailAddress fromEmailAddress = new EmailAddress { Email = $"donotreply@{host}", DisplayName = tenant.Name }; // Return email to send return(new Email { BccAddresses = _emailService.ListBccEmailAddresses(), Content = content, FromAddress = fromEmailAddress, ReplyToAddress = fromEmailAddress, ToAddresses = toAddresses, }); }
private IEnumerable <FormFieldLabelValue> GetFormFieldLabelValues(FormElementSettings settings, FormElementActionRequest request) { foreach (FormField field in settings.Fields) { FormFieldValue value = request.Fields.Where(f => f.FormFieldId == field.FormFieldId).FirstOrDefault(); if (value != null) { yield return(new FormFieldLabelValue { Label = field.Label, Value = value.Value }); } } }
public async Task <IElementView <FormElementSettings, object> > ReadElementViewAsync(long tenantId, long elementId, IPageContext context) { FormElementSettings settings = await _elementRepository.ReadElementSettingsAsync(tenantId, elementId); if (settings == null) { return(null); } return(new ElementView <FormElementSettings, object> { Settings = settings, Content = null }); }