public virtual CreateMessageResult CreateMessage(MessageContext messageContext, bool queue, params object[] modelParts) { ValidateMessageContext(messageContext, ref modelParts); // Create and assign model var model = messageContext.Model = new TemplateModel(); // Add all global template model parts _modelProvider.AddGlobalModelParts(messageContext); // Add specific template models for passed parts foreach (var part in modelParts) { _modelProvider.AddModelPart(part, messageContext); } var messageTemplate = messageContext.MessageTemplate; // Render templates //var to = RenderEmailAddress(messageTemplate.To, messageContext); //var replyTo = RenderEmailAddress(messageTemplate.ReplyTo, messageContext, false); //var bcc = RenderTemplate(messageTemplate.BccEmailAddresses, messageContext, false); var subject = RenderTemplate(messageTemplate.Subject, messageContext); ((dynamic)model).Email.Subject = subject; var body = RenderBodyTemplate(messageContext); // CSS inliner body = InlineCss(body); var mail = new SendMail { Subject = subject, Body = body, MessageId = "mail", ToEmail = messageContext.EmailAccount.FromAddress }; _sendMailService.SendMailSmtp(mail); return(new CreateMessageResult { MessageContext = messageContext }); }
public virtual string FormatAddress(Address address, bool newLineToBr = false) { Guard.NotNull(address, nameof(address)); var messageContext = new MessageContext { Language = _services.WorkContext.WorkingLanguage, Store = _services.StoreContext.CurrentStore, Model = new TemplateModel() }; _messageModelProvider.AddModelPart(address, messageContext, "Address"); var model = messageContext.Model["Address"]; var result = FormatAddress(model, address?.Country?.AddressFormat, messageContext.FormatProvider); if (newLineToBr) { result = HtmlUtils.ConvertPlainTextToHtml(result); } return(result); }
public virtual CreateMessageResult CreateMessage(MessageContext messageContext, bool queue, params object[] modelParts) { Guard.NotNull(messageContext, nameof(messageContext)); modelParts = modelParts ?? new object[0]; // Handle TestMode if (messageContext.TestMode && modelParts.Length == 0) { modelParts = GetTestModels(messageContext); } ValidateMessageContext(messageContext, ref modelParts); // Create and assign model var model = messageContext.Model = new TemplateModel(); // Do not create message if the template does not exist, is not authorized or not active. if (messageContext.MessageTemplate == null) { return(new CreateMessageResult { Model = model, MessageContext = messageContext }); } // Add all global template model parts _modelProvider.AddGlobalModelParts(messageContext); // Add specific template models for passed parts foreach (var part in modelParts) { if (model != null) { _modelProvider.AddModelPart(part, messageContext); } } // Give implementors the chance to customize the final template model _services.EventPublisher.Publish(new MessageModelCreatedEvent(messageContext, model)); var messageTemplate = messageContext.MessageTemplate; var languageId = messageContext.Language.Id; // Render templates var to = RenderEmailAddress(messageTemplate.To, messageContext); var replyTo = RenderEmailAddress(messageTemplate.ReplyTo, messageContext, false); var bcc = RenderTemplate(messageTemplate.GetLocalized((x) => x.BccEmailAddresses, languageId), messageContext, false); var subject = RenderTemplate(messageTemplate.GetLocalized((x) => x.Subject, languageId), messageContext); ((dynamic)model).Email.Subject = subject; var body = RenderBodyTemplate(messageContext); // CSS inliner body = InlineCss(body, model); // Model tree var modelTree = _modelProvider.BuildModelTree(model); var modelTreeJson = JsonConvert.SerializeObject(modelTree, Formatting.None); if (modelTreeJson != messageTemplate.LastModelTree) { messageContext.MessageTemplate.LastModelTree = modelTreeJson; if (!messageTemplate.IsTransientRecord()) { _messageTemplateService.UpdateMessageTemplate(messageContext.MessageTemplate); } } // Create queued email from template var qe = new QueuedEmail { Priority = 5, From = messageContext.SenderEmailAddress ?? messageContext.EmailAccount.ToEmailAddress(), To = to.ToString(), Bcc = bcc, ReplyTo = replyTo?.ToString(), Subject = subject, Body = body, CreatedOnUtc = DateTime.UtcNow, EmailAccountId = messageContext.EmailAccount.Id, SendManually = messageTemplate.SendManually }; // Create and add attachments (if any) CreateAttachments(qe, messageContext); if (queue) { // Put to queue QueueMessage(messageContext, qe); } return(new CreateMessageResult { Email = qe, Model = model, MessageContext = messageContext }); }