public void TestCampaignSummary() { MailChimpCampaign mc = new MailChimpCampaign(""); MailChimpManager mm = new MailChimpManager("71a4b48110cf9e7de70d56772d31257d-us8"); var temp = mm.GetCampaigns(); ReportSummary reportSummary = mm.GetReportSummary("c77ad12743"); Assert.IsNotNull(reportSummary); }
public void TestCampaign() { MailChimpCampaign mc = new MailChimpCampaign("71a4b48110cf9e7de70d56772d31257d-us8"); //mc.SendCampaign( // "", // new List<string> { "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**" }, // "mailchimp test campaign (Sent by UNIT Test method)", // "campaign subject test - no more footers", // "<div>hello (footer removed??)</div>", // "*****@*****.**", // "NM", // null); }
/// <summary> /// Analyze campaign statistics for mailchimp /// </summary> private void AnalizeMailChimpCampaigns() { var campaigns = _campaignService.GetCampaignsSeekingAnalysis(new GetCampaignsSeekingAnalysisRequest()).Campaigns; var uniqueAccounts = campaigns.Select(c => c.AccountID).Distinct(); var mailChimpAuthKey = new Dictionary <int, IEnumerable <ProviderRegistrationViewModel> >(); foreach (int accountId in uniqueAccounts) { var provider = _communicationService.GetCommunicationProviders(new GetCommunicatioProvidersRequest() { AccountId = accountId }); mailChimpAuthKey.Add(accountId, provider.RegistrationListViewModel.Where(p => p.MailProviderID == LM.MailProvider.MailChimp)); } foreach (var campaign in campaigns) { try { Log.Informational(string.Format("In seeking analysis for mailchimp campaigns, campaign {0}", campaign.ToString())); var providers = mailChimpAuthKey.ContainsKey(campaign.AccountID) ? mailChimpAuthKey[campaign.AccountID] : default(IEnumerable <ProviderRegistrationViewModel>); if (providers != null && providers.Any(provider => provider.ServiceProviderID == campaign.ServiceProviderID)) { var authKey = providers.First(provider => provider.ServiceProviderID == campaign.ServiceProviderID).ApiKey; var total = 0; var recipients = new MailChimpCampaign(authKey).AnalyzeCampaign(campaign.ServiceProviderCampaignID, out total); _campaignService.UpdateCampaignTriggerStatus(new UpdateCampaignTriggerStatusRequest(campaign.Id) { Status = CampaignStatus.Sent, SentDateTime = DateTime.UtcNow, ServiceProviderCampaignId = campaign.ServiceProviderCampaignID, SentCount = total, Recipients = recipients.ToList(), Remarks = "Campaign sent successfully", AccountId = campaign.AccountID }); _accountService.ScheduleAnalyticsRefresh(campaign.Id, (byte)IndexType.Campaigns); } } catch (Exception ex) { Log.Error("Could not get campaign analytics at this point of time. CampaignId: " + campaign, ex); } } }
protected override void ExecuteInternal(IJobExecutionContext context) { var mailChimpCampaignId = string.Empty; Campaign campaign = null; var imageHostingUrl = _jobConfig.ImageHostingServiceUrl; var maxHours = _jobConfig.RetryMaxHours; var timeToRescheduleInMinutes = _jobConfig.RescheduleMinutes; try { //Get the campaign to start processing campaign = _campaignService.GetNextCampaignToTriggerAsync().Result.Campaign; while (campaign != null) { var isDelayed = campaign.CampaignStatus == CampaignStatus.Delayed; Log.Informational(string.Format("Campaign {0} has been picked up for sending.", campaign)); //Campaign primary information var serviceProvider = campaign.ServiceProviderID.HasValue ? _communicationService.GetEmailProviderById(new GetServiceProviderByIdRequest { AccountId = campaign.AccountID, ServiceProviderId = campaign.ServiceProviderID.Value }).CampaignEmailProvider : _communicationService.GetDefaultCampaignEmailProvider(new GetDefaultCampaignEmailProviderRequest { AccountId = campaign.AccountID }).CampaignEmailProvider; var emailProvider = campaign.ServiceProviderID.HasValue ? _campaignService.GetEmailProviderById(new GetServiceProviderSenderEmailRequest { AccountId = campaign.AccountID, RequestedBy = campaign.CreatedBy, ServiceProviderID = campaign.ServiceProviderID.Value }) : _campaignService.GetDefaultBulkEmailProvider(new GetServiceProviderSenderEmailRequest { AccountId = campaign.AccountID, RequestedBy = campaign.CreatedBy }); var accountDomain = serviceProvider.Account.DomainURL.ToLower(); var accountAddress = serviceProvider.Account.Addresses?.Any(a => a.IsDefault) ?? false? serviceProvider.Account.Addresses.First(a => a.IsDefault).ToString() : string.Empty; Log.Informational(string.Format("Update campaign status to sending {0}", campaign)); var successfulRecipients = new List <int>(); //Update campaign to sending status UpdateCampaignTriggerStatus(campaign, isDelayed ? CampaignStatus.Retrying : CampaignStatus.Sending, "The campaign has been picked up for sending", serviceProvider, successfulRecipients, campaign.AccountID, isDelayed); //Campaign Recipients Log.Informational(string.Format("Get recipients info {0}", campaign)); try { var campaignRecipientsInfo = _campaignService.GetCampaignRecipientsInfo(new GetCampaignRecipientsRequest { CampaignId = campaign.Id, IsLinkedToWorkflow = false }); if (campaignRecipientsInfo.RecipientsInfo.IsAny()) { var customFieldsValueOptions = _customFieldRepository.GetCustomFieldsValueOptions(campaign.AccountID).ToArray(); var campaignRecipients = campaignRecipientsInfo.RecipientsInfo.Select(c => new EmailRecipient { ContactId = Convert.ToInt32(c.Value["CONTACTID"]), CampaignRecipientID = Convert.ToInt32(c.Value["CRID"]), EmailId = c.Value["EMAILID"].ToString().TrimEnd(), ContactFields = c.Value }).ToList(); var mailRegistration = _mailService.GetMailRegistrationDetails(serviceProvider.LoginToken); string content; if (!string.IsNullOrEmpty(serviceProvider.ImageDomain?.Domain)) { mailRegistration.ImageDomain = serviceProvider.ImageDomain.Domain; content = campaign.HTMLContent.Replace(imageHostingUrl, serviceProvider.ImageDomain.Domain); var imageDomainProtocol = serviceProvider.ImageDomain.Domain.Substring(0, serviceProvider.ImageDomain.Domain.IndexOf("://") + 3); var index = serviceProvider.ImageDomain.Domain.IndexOf("//"); var dotCount = serviceProvider.ImageDomain.Domain.Count(d => d == '.'); var linkDomain = serviceProvider.ImageDomain.Domain; if (index >= 0 && dotCount == 1) { linkDomain = serviceProvider.ImageDomain.Domain.Replace(imageDomainProtocol, imageDomainProtocol + serviceProvider.AccountCode + "."); content = content.Replace("http://" + accountDomain, linkDomain).Replace("https://" + accountDomain, linkDomain); } } else { content = campaign.HTMLContent; } content = content.Replace("*|CAMPID|*", campaign.Id.ToString()).Replace("<o:p>", "").Replace("</o:p>", ""); campaign.HTMLContent = content; var mailProvider = default(IMailProvider); switch (mailRegistration.MailProviderID) { case LM.MailProvider.MailChimp: mailProvider = new MailChimpCampaign(mailRegistration.APIKey); break; case LM.MailProvider.SmartTouch: mailProvider = new SmartTouchProvider(); break; case LM.MailProvider.Undefined: case LM.MailProvider.Smtp: case LM.MailProvider.SendGrid: case LM.MailProvider.CustomSmartTouch: case LM.MailProvider.CustomMailChimp: default: break; } var failedRecipientIDs = new List <Tuple <Exception, int[]> >(); try { var numberOfIternations = mailProvider.BatchCount == 0 ? 1 : Math.Ceiling(campaignRecipients.Count / (decimal)mailProvider.BatchCount); #region Batch Process for (int i = 0; i < numberOfIternations; i++) { var batchRecipientIDs = campaignRecipients .Skip(mailProvider.BatchCount * i) .Take(mailProvider.BatchCount) .Select(r => r.CampaignRecipientID) .ToArray(); var batchCount = mailRegistration.MailProviderID == LM.MailProvider.MailChimp ? campaignRecipients.Count() : mailProvider.BatchCount; Log.Informational("Batch count: " + batchCount); var recipients = campaignRecipients .Skip(mailProvider.BatchCount * i) .Take(batchCount) .ToList(); var validRecipients = recipients .Where(x => _emailValidator.IsValidEmail(x.EmailId)) .ToList(); try { Log.Informational(string.Format("Sending campaign to vmta {0}, iteration {1}", campaign, i)); mailChimpCampaignId = mailProvider.SendCampaign(campaign, validRecipients , customFieldsValueOptions, serviceProvider.AccountCode, accountAddress, accountDomain , (emailProvider.SenderEmail != null ? emailProvider.SenderEmail.EmailId : string.Empty), mailRegistration); _campaignService.UpdateCampaignRecipientsStatus(new UpdateCampaignRecipientsStatusRequest { CampaignRecipientIDs = validRecipients.Select(r => r.CampaignRecipientID).ToList(), Remarks = "Campaign Sent Successfully", SentOn = DateTime.UtcNow, DeliveredOn = DateTime.UtcNow, DeliveryStatus = CampaignDeliveryStatus.Delivered }); successfulRecipients.AddRange(batchRecipientIDs); var invalidRecipients = recipients .Except(validRecipients) .ToList(); if (invalidRecipients.Any()) { Log.Informational(string.Format("Updating invalid email recipients {0}, count {1}", campaign, invalidRecipients.Count())); _campaignService.UpdateCampaignRecipientsStatus(new UpdateCampaignRecipientsStatusRequest { CampaignRecipientIDs = invalidRecipients.Select(r => r.CampaignRecipientID).ToList(), Remarks = "Failed due to invalid email", SentOn = DateTime.UtcNow, DeliveredOn = DateTime.UtcNow, DeliveryStatus = CampaignDeliveryStatus.Failed }); } } catch (Exception ex) { failedRecipientIDs.Add(Tuple.Create(ex, batchRecipientIDs)); var message = string.Format("Campaign batch failed - {0} - Iteration {1} - Batch Count {2}", campaign, i, mailProvider.BatchCount); Log.Critical(message, ex); } } #endregion var isCampaignPartialFailed = failedRecipientIDs.Any(); if (isCampaignPartialFailed && campaign.ScheduleTime - campaign.CreatedDate < TimeSpan.FromMinutes(timeToRescheduleInMinutes)) { _campaignService.ReScheduleCampaign(campaign.Id, DateTime.UtcNow.AddMinutes(5)); UpdateCampaignTriggerStatus(campaign, CampaignStatus.Scheduled, "The campaign has been rescheduled", serviceProvider, successfulRecipients, campaign.AccountID, isDelayed); } else { foreach (var failedBatch in failedRecipientIDs) { _campaignService.UpdateCampaignRecipientsStatus( new UpdateCampaignRecipientsStatusRequest { CampaignRecipientIDs = failedBatch.Item2.ToList(), Remarks = string.Format("Exception:{0}", failedBatch.Item1.Message), SentOn = DateTime.UtcNow, DeliveredOn = DateTime.UtcNow, DeliveryStatus = CampaignDeliveryStatus.Failed }); } } var remarks = isCampaignPartialFailed ? "Campaign partially failed due to bad emails" : "The campaign has been picked up for sending"; var status = isCampaignPartialFailed ? CampaignStatus.Delayed : mailRegistration.MailProviderID == LM.MailProvider.MailChimp ? CampaignStatus.Analyzing : CampaignStatus.Sent; //if (status == CampaignStatus.Delayed && (campaign.CampaignStatus == CampaignStatus.Scheduled || campaign.CampaignStatus == CampaignStatus.Queued)) //{ // SendSupportNotificationEmail(campaign.AccountID, campaign.CreatedBy, campaign.Id, false, campaign.Name); //} //else if (status == CampaignStatus.Delayed && campaign.CampaignStatus == CampaignStatus.Delayed && (DateTime.UtcNow - campaign.ScheduleTime)?.TotalHours > maxHours) { status = CampaignStatus.Draft; //SendSupportNotificationEmail(campaign.AccountID, campaign.CreatedBy, campaign.Id, true, campaign.Name); } _accountService.ScheduleAnalyticsRefresh(campaign.Id, (byte)IndexType.Campaigns); UpdateCampaignTriggerStatus(campaign, status, remarks, serviceProvider, successfulRecipients, campaign.AccountID, isDelayed, mailChimpCampaignId); } catch (Exception ex) { Log.Critical("Campaign batch failed " + campaign, ex); var remarks = "Error while sending campaign, please contact administrator. Additional Info: " + ex; UpdateCampaignTriggerStatus(campaign, CampaignStatus.Failure, remarks, serviceProvider, successfulRecipients, campaign.AccountID, isDelayed); } } else { var remarks = "No campaign recipients found"; UpdateCampaignTriggerStatus(campaign, CampaignStatus.Failure, remarks, serviceProvider, successfulRecipients, campaign.AccountID, isDelayed); } //Social posts ShareSocialPost(_socialIntegrationService, campaign); } catch (Exception ex) { var remarks = "Error while sending campaign, Additional Info: " + ex; var campaignKey = "Campaign"; if (!ex.Data.Contains(campaignKey)) { ex.Data.Add(campaignKey, campaign.Id.ToString()); } _campaignService.UpdateCampaignTriggerStatus( new UpdateCampaignTriggerStatusRequest(campaign.Id) { Status = CampaignStatus.Delayed, SentDateTime = DateTime.UtcNow, Remarks = remarks }); Log.Error(remarks, ex); } finally { campaign = _campaignService.GetNextCampaignToTriggerAsync().Result.Campaign; } } AnalizeMailChimpCampaigns(); } catch (Exception ex) { ExceptionHandler.Current.HandleException(ex, DefaultExceptionPolicies.LOG_ONLY_POLICY); if (campaign != null) { var remarks = "Error while sending campaign, please contact administrator. Additional Info: " + ex; _campaignService.UpdateCampaignTriggerStatus(new UpdateCampaignTriggerStatusRequest(campaign.Id) { Status = CampaignStatus.Failure, SentDateTime = DateTime.UtcNow, Remarks = remarks }); } } }
protected override void ExecuteInternal(IJobExecutionContext context) { #region local variables var customFieldRepository = IoC.Container.GetInstance <ICustomFieldRepository>(); var socialIntegrationService = IoC.Container.GetInstance <ISocialIntegrationService>(); var mailService = new MailService(); var mailChimpCampaignId = string.Empty; Campaign campaign = null; bool isDelayedCampaign = false; #endregion try { //Get the campaign to start processing campaign = _campaignService.GetNextCampaignToTriggerAsync().Result.Campaign; while (campaign != null) { isDelayedCampaign = campaign.CampaignStatus == CampaignStatus.Delayed ? true : false; var imageHostingUrl = ConfigurationManager.AppSettings["IMAGE_HOSTING_SERVICE_URL"].ToString(); Log.Informational(string.Format("Campaign {0} has been picked up for sending.", campaign.ToString())); //Campaign primary information var serviceProvider = campaign.ServiceProviderID.HasValue ? _communicationService.GetEmailProviderById(new GetServiceProviderByIdRequest { AccountId = campaign.AccountID, ServiceProviderId = campaign.ServiceProviderID.Value }).CampaignEmailProvider : _communicationService.GetDefaultCampaignEmailProvider(new GetDefaultCampaignEmailProviderRequest { AccountId = campaign.AccountID }).CampaignEmailProvider; var emailProvider = campaign.ServiceProviderID.HasValue ? _campaignService.GetEmailProviderById(new GetServiceProviderSenderEmailRequest { AccountId = campaign.AccountID, RequestedBy = campaign.CreatedBy, ServiceProviderID = campaign.ServiceProviderID.Value }) : _campaignService.GetDefaultBulkEmailProvider(new GetServiceProviderSenderEmailRequest { AccountId = campaign.AccountID, RequestedBy = campaign.CreatedBy }); var accountDomain = serviceProvider.Account.DomainURL.ToLower(); var accountAddress = (serviceProvider.Account.Addresses != null && serviceProvider.Account.Addresses.Where(a => a.IsDefault == true).Any()) ? serviceProvider.Account.Addresses.Where(a => a.IsDefault == true).First().ToString() : string.Empty; Log.Informational(string.Format("Update campaign status to sending {0}", campaign.ToString())); List <int> successfulRecipients = new List <int>(); //Update campaign to sending status UpdateCampaignTriggerStatus(campaign, isDelayedCampaign ? CampaignStatus.Retrying : CampaignStatus.Sending, "The campaign has been picked up for sending", serviceProvider, successfulRecipients, campaign.AccountID, isDelayedCampaign); //Campaign Recipients Log.Informational(string.Format("Get recipients info {0}", campaign.ToString())); try { var campaignRecipientsInfo = _campaignService.GetCampaignRecipientsInfo(new GetCampaignRecipientsRequest { CampaignId = campaign.Id, IsLinkedToWorkflow = false }); if (campaignRecipientsInfo.RecipientsInfo.IsAny()) { var customFieldsValueOptions = customFieldRepository.GetCustomFieldsValueOptions(campaign.AccountID); var campaignRecipients = campaignRecipientsInfo.RecipientsInfo.Select(c => new EmailRecipient { ContactId = Convert.ToInt32(c.Value["CONTACTID"]), CampaignRecipientID = Convert.ToInt32(c.Value["CRID"]), EmailId = c.Value["EMAILID"].ToString().TrimEnd(), ContactFields = c.Value }).ToList(); var mailRegistration = mailService.GetMailRegistrationDetails(serviceProvider.LoginToken); var content = ""; if (imageHostingUrl != null && serviceProvider.ImageDomain != null && !string.IsNullOrEmpty(serviceProvider.ImageDomain.Domain)) { mailRegistration.ImageDomain = serviceProvider.ImageDomain.Domain; content = campaign.HTMLContent.Replace(imageHostingUrl, serviceProvider.ImageDomain.Domain); var imageDomainProtocol = serviceProvider.ImageDomain.Domain.Substring(0, serviceProvider.ImageDomain.Domain.IndexOf("://") + 3); var index = serviceProvider.ImageDomain.Domain.IndexOf("//"); var dotCount = serviceProvider.ImageDomain.Domain.Count(d => d == '.'); var linkDomain = serviceProvider.ImageDomain.Domain; if (index >= 0 && dotCount == 1) { linkDomain = serviceProvider.ImageDomain.Domain.Replace(imageDomainProtocol, imageDomainProtocol + serviceProvider.AccountCode + "."); content = content.Replace("http://" + accountDomain, linkDomain).Replace("https://" + accountDomain, linkDomain); } } else { content = campaign.HTMLContent; } content = content.Replace("*|CAMPID|*", campaign.Id.ToString()).Replace("<o:p>", "").Replace("</o:p>", ""); campaign.HTMLContent = content; var mailProvider = default(IMailProvider); switch (mailRegistration.MailProviderID) { case LM.MailProvider.MailChimp: mailProvider = new MailChimpCampaign(mailRegistration.APIKey); break; case LM.MailProvider.SmartTouch: mailProvider = new SmartTouchProvider(); break; case LM.MailProvider.Undefined: case LM.MailProvider.Smtp: case LM.MailProvider.SendGrid: case LM.MailProvider.CustomSmartTouch: case LM.MailProvider.CustomMailChimp: default: break; } try { var numberOfIternations = mailProvider.BatchCount == 0 ? 1 : Math.Ceiling(campaignRecipients.Count / (decimal)mailProvider.BatchCount); var isCampaignPartialFailed = default(bool); #region Batch Process for (int i = 0; i < numberOfIternations; i++) { IEnumerable <int> batchRecipientIDs = campaignRecipients.Skip(mailProvider.BatchCount * i).Take(mailProvider.BatchCount).Select(r => r.CampaignRecipientID).ToList(); var batchCount = mailRegistration.MailProviderID == LM.MailProvider.MailChimp ? campaignRecipients.Count() : mailProvider.BatchCount; Log.Informational("Batch count: " + batchCount); var validRecipients = GetValidEmailRecipients(campaignRecipients.Skip(mailProvider.BatchCount * i).Take(batchCount).ToList()); try { Log.Informational(string.Format("Sending campaign to vmta {0}, iteration {1}", campaign.ToString(), i)); mailChimpCampaignId = mailProvider.SendCampaign(campaign, validRecipients , customFieldsValueOptions, serviceProvider.AccountCode, accountAddress, accountDomain , (emailProvider.SenderEmail != null ? emailProvider.SenderEmail.EmailId : string.Empty), mailRegistration); _campaignService.UpdateCampaignRecipientsStatus(new UpdateCampaignRecipientsStatusRequest { CampaignRecipientIDs = validRecipients.Select(r => r.CampaignRecipientID).ToList(), Remarks = "Campaign Sent Successfully", SentOn = DateTime.UtcNow, DeliveredOn = DateTime.UtcNow, DeliveryStatus = CampaignDeliveryStatus.Delivered }); successfulRecipients.AddRange(batchRecipientIDs); var invalidRecipients = campaignRecipients.Skip(mailProvider.BatchCount * i).Take(mailProvider.BatchCount).ToList().Except(validRecipients); if (invalidRecipients != null && invalidRecipients.Any()) { Log.Informational(string.Format("Updating invalid email recipients {0}, count {1}", campaign.ToString(), invalidRecipients.Count())); _campaignService.UpdateCampaignRecipientsStatus(new UpdateCampaignRecipientsStatusRequest { CampaignRecipientIDs = invalidRecipients.Select(r => r.CampaignRecipientID).ToList(), Remarks = "Failed due to invalid email", SentOn = DateTime.UtcNow, DeliveredOn = DateTime.UtcNow, DeliveryStatus = CampaignDeliveryStatus.Failed }); } } catch (Exception ex) { var deliveryStatus = CampaignDeliveryStatus.Failed; if (ex is TimeoutException) { isCampaignPartialFailed = false; deliveryStatus = CampaignDeliveryStatus.Delivered; } else { isCampaignPartialFailed = true; deliveryStatus = CampaignDeliveryStatus.Failed; } if (deliveryStatus == CampaignDeliveryStatus.Delivered) { successfulRecipients.AddRange(batchRecipientIDs); } _campaignService.UpdateCampaignRecipientsStatus(new UpdateCampaignRecipientsStatusRequest { CampaignRecipientIDs = batchRecipientIDs.ToList(), Remarks = string.Format("Exception:{0}", ex.Message), SentOn = DateTime.UtcNow, DeliveredOn = DateTime.UtcNow, DeliveryStatus = deliveryStatus }); var message = string.Format("Campaign batch failed - {0} - Iteration {1} - Batch Count {2}", campaign.ToString(), i, mailProvider.BatchCount); Log.Critical(message, ex); } } _accountService.ScheduleAnalyticsRefresh(campaign.Id, (byte)IndexType.Campaigns); #endregion var remarks = isCampaignPartialFailed ? "Campaign partially failed due to bad emails" : "The campaign has been picked up for sending"; var status = isCampaignPartialFailed ? CampaignStatus.Delayed : (mailRegistration.MailProviderID == LM.MailProvider.MailChimp) ? CampaignStatus.Analyzing : CampaignStatus.Sent; int maxHours = int.Parse(ConfigurationManager.AppSettings["RetryMaxHours"].ToString()); if (status == CampaignStatus.Delayed && (campaign.CampaignStatus == CampaignStatus.Scheduled || campaign.CampaignStatus == CampaignStatus.Queued)) { SendEmail(campaign.AccountID, campaign.CreatedBy, campaign.Id, false, campaign.Name); } else if (status == CampaignStatus.Delayed && campaign.CampaignStatus == CampaignStatus.Delayed && campaign.ScheduleTime.HasValue && DateTime.UtcNow.Subtract(campaign.ScheduleTime.Value).TotalHours > maxHours) { status = CampaignStatus.Draft; SendEmail(campaign.AccountID, campaign.CreatedBy, campaign.Id, true, campaign.Name); } UpdateCampaignTriggerStatus(campaign, status, remarks, serviceProvider, successfulRecipients, campaign.AccountID, isDelayedCampaign, mailChimpCampaignId); } catch (Exception ex) { Log.Critical("Campaign batch failed " + campaign.ToString(), ex); var remarks = "Error while sending campaign, please contact administrator. Additional Info: " + ex.ToString(); UpdateCampaignTriggerStatus(campaign, CampaignStatus.Failure, remarks, serviceProvider, successfulRecipients, campaign.AccountID, isDelayedCampaign); } } else { var remarks = "No campaign recipients found"; UpdateCampaignTriggerStatus(campaign, CampaignStatus.Failure, remarks, serviceProvider, successfulRecipients, campaign.AccountID, isDelayedCampaign); } //Social posts ShareSocialPost(socialIntegrationService, campaign); } catch (Exception ex) { var remarks = "Error while sending campaign, Additional Info: " + ex.ToString(); var campaignKey = "Campaign"; if (!ex.Data.Contains(campaignKey)) { ex.Data.Add(campaignKey, campaign.Id.ToString()); } _campaignService.UpdateCampaignTriggerStatus(new UpdateCampaignTriggerStatusRequest(campaign.Id) { Status = CampaignStatus.Delayed, SentDateTime = DateTime.Now.ToUniversalTime(), Remarks = remarks }); Log.Error(remarks, ex); } finally { campaign = _campaignService.GetNextCampaignToTriggerAsync().Result.Campaign; } } AnalizeMailChimpCampaigns(); } catch (Exception ex) { ExceptionHandler.Current.HandleException(ex, DefaultExceptionPolicies.LOG_ONLY_POLICY); if (campaign != null) { var remarks = "Error while sending campaign, please contact administrator. Additional Info: " + ex.ToString(); _campaignService.UpdateCampaignTriggerStatus(new UpdateCampaignTriggerStatusRequest(campaign.Id) { Status = CampaignStatus.Failure, SentDateTime = DateTime.Now.ToUniversalTime(), Remarks = remarks }); } } }