public void Process(ScheduledTaskContext context) { if (context.Task.TaskType != TaskType) { return; } try { dynamic content = context.Task.ContentItem; MailCommunicationPart part = context.Task.ContentItem.As <MailCommunicationPart>(); Int32[] ids = null; Int32? idLocalization = null; _mailerConfig = _orchardServices.WorkContext.CurrentSite.As <MailerSiteSettingsPart>(); if (content.QueryPickerPart != null && content.QueryPickerPart.Ids.Length > 0) { ids = content.QueryPickerPart.Ids; } var localizedPart = content.LocalizationPart; if (localizedPart != null && localizedPart.Culture != null) { idLocalization = localizedPart.Culture.Id; } IList lista; if (part.UseRecipientList) { if (string.IsNullOrWhiteSpace(part.RecipientList)) { lista = new List <object>(); } else { lista = _mailCommunicationService .GetMailQueryResult( part.RecipientList.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries), idLocalization, false, context.Task.ContentItem); } } else { lista = _mailCommunicationService.GetMailQueryResult(ids, idLocalization, false, context.Task.ContentItem); } // ricava i settings e li invia tramite FTP var templateId = ((Laser.Orchard.TemplateManagement.Models.CustomTemplatePickerPart)content.CustomTemplatePickerPart).SelectedTemplate.Id; Dictionary <string, object> settings = GetSettings(content, templateId, part); if (lista == null || lista.Count == 0) { Logger.Error(T("No recipients selected.").ToString()); } else if ((settings.Count > 0) && (lista.Count > 0)) { SendSettings(settings, part.Id); // impagina e invia i recipiens tramite FTP int pageNum = 0; List <object> pagina = new List <object>(); int pageSize = _mailerConfig.RecipientsPerJsonFile; for (int i = 0; i < lista.Count; i++) { if (((i + 1) % pageSize) == 0) { SendRecipients(pagina, part.Id, pageNum); pageNum++; pagina = new List <object>(); } pagina.Add(lista[i]); } // invia l'ultima pagina se non è vuota if (pagina.Count > 0) { SendRecipients(pagina, part.Id, pageNum); } part.RecipientsNumber = lista.Count; part.SentMailsNumber = 0; part.MailMessageSent = true; } else { Logger.Error(T("Error parsing mail template.").ToString()); } } catch (Exception ex) { string idcontenuto = "nessun id "; try { idcontenuto = context.Task.ContentItem.Id.ToString(); } catch (Exception ex2) { Logger.Error(ex2, ex2.Message); } Logger.Error(ex, "Error on " + TaskType + " for ContentItem id = " + idcontenuto + " : " + ex.Message); } }
public void Process(ScheduledTaskContext context) { if (context.Task.TaskType != TaskType) { return; } try { dynamic content = context.Task.ContentItem; NewsletterEditionPart part = context.Task.ContentItem.As <NewsletterEditionPart>(); _mailerConfig = _orchardServices.WorkContext.CurrentSite.As <MailerSiteSettingsPart>(); var urlHelper = _commonServices.GetUrlHelper(); int[] selectedAnnIds; IList <AnnouncementPart> items = null; IEnumerable <ExpandoObject> fullyItems; if (!String.IsNullOrWhiteSpace(part.AnnouncementIds)) { selectedAnnIds = !String.IsNullOrWhiteSpace(part.AnnouncementIds) ? part.AnnouncementIds.Split(',').Select(s => Convert.ToInt32(s)).ToArray() : null; items = GetAnnouncements(selectedAnnIds); fullyItems = items.Select( s => new { AnnouncementPart = s, DisplayUrl = urlHelper.ItemDisplayUrl(s) }.ToExpando()); } else { fullyItems = null; } var subscribers = _newslServices.GetSubscribers(part.NewsletterDefinitionPartRecord_Id).Where(w => w.Confirmed); var subscribersEmails = subscribers.Select(s => new { s.Id, s.Name, EmailAddress = s.Email }); List <object> listaSubscribers = new List <object>(subscribersEmails); // ricava i settings e li invia tramite FTP var templateId = _newslServices.GetNewsletterDefinition(part.NewsletterDefinitionPartRecord_Id, VersionOptions.Published).As <NewsletterDefinitionPart>().TemplateRecord_Id; var model = new { NewsletterEdition = content, ContentItems = fullyItems }.ToExpando(); Dictionary <string, object> settings = GetSettings(model, templateId, part); if ((settings.Count > 0) && (listaSubscribers.Count > 0)) { SendSettings(settings, part.Id); // impagina e invia i recipiens tramite FTP int pageNum = 0; List <object> pagina = new List <object>(); int pageSize = _mailerConfig.RecipientsPerJsonFile; for (int i = 0; i < listaSubscribers.Count; i++) { if (((i + 1) % pageSize) == 0) { SendRecipients(pagina, part.Id, pageNum); pageNum++; pagina = new List <object>(); } pagina.Add(listaSubscribers[i]); } // invia l'ultima pagina se non è vuota if (pagina.Count > 0) { SendRecipients(pagina, part.Id, pageNum); } // Aggiorno la newsletter edition, e rimuovo la relazione tra Newletter e Announcement part.Dispatched = true; part.DispatchDate = DateTime.Now; part.Number = GetNextNumber(part.NewsletterDefinitionPartRecord_Id);; if (items != null) { foreach (var item in items) { var ids = ("," + item.AttachToNextNewsletterIds + ",").Replace("," + part.NewsletterDefinitionPartRecord_Id + ",", ""); item.AttachToNextNewsletterIds = ids; } } _contentManager.Publish(context.Task.ContentItem); } else { Logger.Error(T("Error parsing mail template.").Text); } } catch (Exception ex) { string idcontenuto = "nessun id "; try { idcontenuto = context.Task.ContentItem.Id.ToString(); } catch (Exception ex2) { Logger.Error(ex2, ex2.Message); } Logger.Error(ex, "Error on " + TaskType + " for ContentItem id = " + idcontenuto + " : " + ex.Message); } }