Beispiel #1
0
        private void SendCampaign(Job job, MessageItem messageItem, IEnumerable <Contact> contactsForThisEmail)
        {
            job.Status = "Adjusting email stats...";

            _adjustEmailStatisticsService.AdjustEmailStatistics(_ecmDataProvider, _recipientManagerFactory.GetRecipientManager(messageItem), job, messageItem, _campaign);

            PublishEmail(messageItem);
            var listOfContacts = contactsForThisEmail.ToList();
            var contactIndex   = 1;

            foreach (var contact in listOfContacts)
            {
                if (job.JobStatus == JobStatus.Cancelling)
                {
                    return;
                }

                job.Status = $"Sending email to contact {contactIndex++} of {listOfContacts.Count}";
                try
                {
                    SendEmailToContact(job, contact, messageItem);
                }
                catch (Exception ex)
                {
                    job.Status = ex.ToString();
                    Log.Error("Failed", ex, this);
                }
            }

            GenerateEvents(job, messageItem, _campaign.Events, listOfContacts);
        }
Beispiel #2
0
        public IEnumerable <Contact> GetContacts(MessageItem message, IEnumerable <Guid> excludeContacts)
        {
            string[] facets =
            {
                CollectionModel.FacetKeys.PersonalInformation,
                CollectionModel.FacetKeys.EmailAddressList,
                CollectionModel.FacetKeys.ListSubscriptions
            };
            var recipientManager       = _recipientManagerFactory.GetRecipientManager(message);
            var contactBatchEnumerator = recipientManager.GetMessageRecipients(200, null, facets);

            var contacts = new List <Contact>();

            while (contactBatchEnumerator.MoveNext())
            {
                var batch = contactBatchEnumerator.Current;
                if (batch != null)
                {
                    contacts.AddRange(batch.ToList());
                }
            }

            return(contacts.DistinctBy(x => x.Id).Where(x => x.Id.HasValue && !excludeContacts.Contains(x.Id.Value)));
        }