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); } }
private Dictionary <string, object> GetSettings(dynamic contentModel, int templateId, MailCommunicationPart part) { var data = new Dictionary <string, object>(); var baseUri = new Uri(_orchardServices.WorkContext.CurrentSite.BaseUrl); Dictionary <string, object> similViewBag = new Dictionary <string, object>(); similViewBag.Add("CampaignLink", _communicationService.GetCampaignLink("Email", part)); string body = _templateService.RitornaParsingTemplate(contentModel, templateId, similViewBag); if (!body.StartsWith("Error On Template")) { string host = string.Format("{0}://{1}{2}", baseUri.Scheme, baseUri.Host, baseUri.Port == 80 ? string.Empty : ":" + baseUri.Port); var urlHelper = _commonServices.GetUrlHelper(); // Add Link [UNSUBSCRIBE] string ph_Unsubscribe = "[UNSUBSCRIBE]"; string unsubscribe = T("Click here to stop receiving email for commercial use").Text; string linkUnsubscribe = "<a href='" + string.Format("{0}{1}", host, urlHelper.UnsubscribeMailCommunication()) + "'>" + unsubscribe + "</a>"; if (body.Contains(ph_Unsubscribe)) { body = body.Replace(ph_Unsubscribe, linkUnsubscribe); } else { body += "<br /><br />" + linkUnsubscribe; } var subject = contentModel.TitlePart.Title; var smtp = _orchardServices.WorkContext.CurrentSite.As <SmtpSettingsPart>(); string priority = "L"; switch (_mailerConfig.MailPriority) { case MailPriorityValues.High: priority = "H"; break; case MailPriorityValues.Normal: priority = "N"; break; default: priority = "L"; break; } var baseUrl = baseUri.ToString(); // token di sicurezza: contiene data e ora (senza minuti e secondi) e id del content item var token = string.Format("{0}{1}", DateTime.Now.ToString("yyyyMMddHH"), (contentModel as ContentItem).Id); token = Convert.ToBase64String(System.Text.Encoding.Unicode.GetBytes(token)); //var url = string.Format("{0}/Laser.Orchard.MailCommunication/MailerResult?tk={1}", baseUrl, token); // versione per il GET var tenantPrefix = GetTenantUrlPrexix(_shellSettings); var url = string.Format("{0}/{1}api/Laser.Orchard.MailCommunication/MailerResultAPI?tk={2}", baseUrl, tenantPrefix, token); // versione per il POST data.Add("Subject", subject); data.Add("Body", body); data.Add("Sender", smtp.Address); data.Add("Priority", priority); data.Add("Url", url); // url di ritorno per comunicare a Orchard il numero di mail inviate con successo data.Add("Attachments", ""); // TODO esempio: "[\"prova.pdf\",\"prova.docx\"]" 2016-01-14: per ora non li gestiamo } return(data); }