public IEnumerable <EmailMessageEntity> CreateEmailMessageInternal() { ExecuteQuery(); foreach (EmailAddressEmbedded from in GetFrom()) { foreach (List <EmailOwnerRecipientData> recipients in GetRecipients()) { CultureInfo ci = recipients.Where(a => a.Kind == EmailRecipientKind.To).Select(a => a.OwnerData.CultureInfo).FirstOrDefault().ToCultureInfo() ?? EmailLogic.Configuration.DefaultCulture.ToCultureInfo(); EmailMessageEntity email = new EmailMessageEntity { Target = entity?.ToLite() ?? (this.systemEmail.UntypedEntity as Entity)?.ToLite(), Recipients = recipients.Select(r => new EmailRecipientEntity(r.OwnerData) { Kind = r.Kind }).ToMList(), From = from, IsBodyHtml = template.IsBodyHtml, EditableMessage = template.EditableMessage, Template = template.ToLite(), Attachments = template.Attachments.SelectMany(g => EmailTemplateLogic.GenerateAttachment.Invoke(g, new EmailTemplateLogic.GenerateAttachmentContext { QueryDescription = this.qd, ModelType = template.SystemEmail.ToType(), SystemEmail = systemEmail, CurrentRows = currentRows, ResultColumns = dicTokenColumn, Entity = entity, Template = template, Culture = ci, })).ToMList() }; EmailTemplateMessageEmbedded message = template.GetCultureMessage(ci) ?? template.GetCultureMessage(EmailLogic.Configuration.DefaultCulture.ToCultureInfo()); if (message == null) { throw new InvalidOperationException("Message {0} does not have a message for CultureInfo {1} (or Default)".FormatWith(template, ci)); } using (CultureInfoUtils.ChangeBothCultures(ci)) { email.Subject = SubjectNode(message).Print( new EmailTemplateParameters(entity, ci, dicTokenColumn, currentRows) { IsHtml = false, SystemEmail = systemEmail }); email.Body = TextNode(message).Print( new EmailTemplateParameters(entity, ci, dicTokenColumn, currentRows) { IsHtml = template.IsBodyHtml, SystemEmail = systemEmail, }); } yield return(email); } } }
private EmailMessageEntity CreateEmailMessageInternal(EmailFromEmbedded from, List <EmailOwnerRecipientData> recipients) { EmailMessageEntity email; try { var ci = this.cultureInfo ?? EmailTemplateLogic.GetCultureInfo?.Invoke(entity ?? model?.UntypedEntity as Entity) ?? recipients.Where(a => a.Kind == EmailRecipientKind.To).Select(a => a.OwnerData.CultureInfo).FirstOrDefault()?.ToCultureInfo() ?? EmailLogic.Configuration.DefaultCulture.ToCultureInfo(); email = new EmailMessageEntity { Target = entity?.ToLite() ?? (this.model !.UntypedEntity as Entity)?.ToLite(), Recipients = recipients.Select(r => new EmailRecipientEmbedded(r.OwnerData) { Kind = r.Kind }).ToMList(), From = from, IsBodyHtml = template.IsBodyHtml, EditableMessage = template.EditableMessage, Template = template.ToLite(), Attachments = template.Attachments.SelectMany(g => EmailTemplateLogic.GenerateAttachment.Invoke(g, new EmailTemplateLogic.GenerateAttachmentContext(this.qd, template, dicTokenColumn, currentRows, ci) { ModelType = template.Model?.ToType(), Model = model, Entity = entity, })).ToMList() }; EmailTemplateMessageEmbedded?message = template.GetCultureMessage(ci) ?? template.GetCultureMessage(ci.Parent) ?? template.GetCultureMessage(EmailLogic.Configuration.DefaultCulture.ToCultureInfo()) ?? template.GetCultureMessage(EmailLogic.Configuration.DefaultCulture.ToCultureInfo().Parent); if (message == null) { throw new InvalidOperationException("Message {0} does not have a message for CultureInfo {1} (or Default)".FormatWith(template, ci)); } using (CultureInfoUtils.ChangeBothCultures(ci)) { email.Subject = SubjectNode(message).Print( new TextTemplateParameters(entity, ci, dicTokenColumn, currentRows) { IsHtml = false, Model = model }); email.Body = new BigStringEmbedded(TextNode(message).Print( new TextTemplateParameters(entity, ci, dicTokenColumn, currentRows) { IsHtml = template.IsBodyHtml, Model = model, })); } } catch (Exception ex) { ex.Data["Template"] = this.template.ToLite(); ex.Data["Model"] = this.model; ex.Data["Entity"] = this.entity; throw; } return(email); }
public IEnumerable <EmailMessageEntity> CreateEmailMessageInternal() { ExecuteQuery(); foreach (EmailAddressEmbedded from in GetFrom()) { foreach (List <EmailOwnerRecipientData> recipients in GetRecipients()) { CultureInfo ci = recipients.Where(a => a.Kind == EmailRecipientKind.To).Select(a => a.OwnerData.CultureInfo).FirstOrDefault()?.ToCultureInfo() ?? EmailLogic.Configuration.DefaultCulture.ToCultureInfo(); EmailMessageEntity email = new EmailMessageEntity { Target = entity?.ToLite() ?? (this.model !.UntypedEntity as Entity)?.ToLite(), Recipients = recipients.Select(r => new EmailRecipientEmbedded(r.OwnerData) { Kind = r.Kind }).ToMList(), From = from, IsBodyHtml = template.IsBodyHtml, EditableMessage = template.EditableMessage, Template = template.ToLite(), Attachments = template.Attachments.SelectMany(g => EmailTemplateLogic.GenerateAttachment.Invoke(g, new EmailTemplateLogic.GenerateAttachmentContext(this.qd, template, dicTokenColumn, currentRows, ci) { ModelType = template.Model?.ToType(), Model = model, Entity = entity, })).ToMList() }; EmailTemplateMessageEmbedded message = template.GetCultureMessage(ci) ?? template.GetCultureMessage(EmailLogic.Configuration.DefaultCulture.ToCultureInfo()); if (message == null) { throw new InvalidOperationException("Message {0} does not have a message for CultureInfo {1} (or Default)".FormatWith(template, ci)); } using (CultureInfoUtils.ChangeBothCultures(ci)) { email.Subject = SubjectNode(message).Print( new TextTemplateParameters(entity, ci, dicTokenColumn, currentRows) { IsHtml = false, Model = model }); email.Body = TextNode(message).Print( new TextTemplateParameters(entity, ci, dicTokenColumn, currentRows) { IsHtml = template.IsBodyHtml, Model = model, }); } yield return(email); } } } TextTemplateParser.BlockNode TextNode(EmailTemplateMessageEmbedded message) { if (message.TextParsedNode == null) { string body = message.Text; if (template.MasterTemplate != null) { var emt = template.MasterTemplate.RetrieveAndRemember(); var emtm = emt.GetCultureMessage(message.CultureInfo.ToCultureInfo()) ?? emt.GetCultureMessage(EmailLogic.Configuration.DefaultCulture.ToCultureInfo()); if (emtm != null) { body = EmailMasterTemplateEntity.MasterTemplateContentRegex.Replace(emtm.Text, m => body); } } message.TextParsedNode = TextTemplateParser.Parse(body, qd, template.Model?.ToType()); } return((TextTemplateParser.BlockNode)message.TextParsedNode); } TextTemplateParser.BlockNode SubjectNode(EmailTemplateMessageEmbedded message) { if (message.SubjectParsedNode == null) { message.SubjectParsedNode = TextTemplateParser.Parse(message.Subject, qd, template.Model?.ToType()); } return((TextTemplateParser.BlockNode)message.SubjectParsedNode); } IEnumerable <EmailAddressEmbedded> GetFrom() { if (template.From != null) { if (template.From.Token != null) { ResultColumn owner = dicTokenColumn.GetOrThrow(template.From.Token.Token); if (!template.SendDifferentMessages) { yield return(new EmailAddressEmbedded(currentRows.Select(r => (EmailOwnerData)r[owner] !).Distinct().SingleEx())); } else { var groups = currentRows.GroupBy(r => (EmailOwnerData)r[owner] !); if (groups.Count() == 1 && groups.Single().Key?.Owner == null) { yield break; } else { foreach (var gr in groups) { var old = currentRows; currentRows = gr; yield return(new EmailAddressEmbedded(gr.Key)); currentRows = old; } } } } else { yield return(new EmailAddressEmbedded(new EmailOwnerData { CultureInfo = null, Email = template.From.EmailAddress !, DisplayName = template.From.DisplayName, }));