Exemple #1
0
        public void AddStaticSegmentMembers_Successful()
        {
            MailChimpManager           mc       = new MailChimpManager(TestGlobal.Test_APIKey);
            ListResult                 lists    = mc.GetLists();
            List <StaticSegmentResult> segments = mc.GetStaticSegmentsForList(lists.Data[1].Id);
            EmailParameter             email1   = new EmailParameter()
            {
                Email = "*****@*****.**"
            };
            List <EmailParameter> emails = new List <EmailParameter>();

            emails.Add(email1);
            StaticSegmentMembersAddResult result = mc.AddStaticSegmentMembers(lists.Data[1].Id, segments[0].StaticSegmentId, emails);

            Assert.IsTrue(result.successCount == 1);
        }
Exemple #2
0
        private bool SaveSegmentSubscribers(int listId, out string error)
        {
            error = string.Empty;

            CHIMP_UserLists chimpKeysEntity;

            if (!GetChimpKeys(listId, out chimpKeysEntity, out error))
            {
                return(false);
            }

            var segmentEntities = ChimpListSegmentRepository.GetMany(x => x.ListId == listId).ToList();

            if (segmentEntities.Count.Equals(0))
            {
                error = "Mailchimp segments not found";
                return(false);
            }

            var dateFrom = DateTime.Now.Subtract(new TimeSpan(0, 24, 0, 0));
            var mc       = new MailChimpManager(chimpKeysEntity.ApiKey);

            var allSubscribers = ChimpUserListRepository.GetAuthorSubscribers(chimpKeysEntity.UserId);

            try
            {
                foreach (var segEntity in segmentEntities)
                {
                    List <CHIMP_ItemSubscribers> subscribers = null;
                    var emailParams = new List <EmailParameter>();
                    var emailList   = new List <string>();
                    var segmentId   = Int32.Parse(segEntity.Uid);
                    var itemId      = segEntity.BundleId ?? segEntity.CourseId;
                    var itemType    = segEntity.CourseId != null ? 1 : 2;

                    mc.ResetStaticSegment(chimpKeysEntity.Uid, segmentId);


                    var segmentType = Utils.ParseEnum <eSegmentTypes>(segEntity.SegmentTypeId);
                    switch (segmentType)
                    {
                    case eSegmentTypes.Active:
                        if (allSubscribers != null)
                        {
                            emailList = allSubscribers.Where(x => x.StatusId == (int)BillingEnums.eAccessStatuses.ACTIVE).Select(x => x.Email).ToList();
                        }
                        break;

                    case eSegmentTypes.InActive:
                        if (allSubscribers != null)
                        {
                            emailList = allSubscribers.Where(x => x.StatusId != (int)BillingEnums.eAccessStatuses.ACTIVE).Select(x => x.Email).ToList();
                        }
                        break;

                    case eSegmentTypes.Item:
                        subscribers = ChimpListSegmentRepository.GetItemSubscribers(itemId, itemType);
                        if (subscribers != null)
                        {
                            emailList = subscribers.Where(x => x.StatusId == (int)BillingEnums.eAccessStatuses.ACTIVE).Select(x => x.Email).ToList();
                        }
                        break;

                    case eSegmentTypes.ItemNew:
                        subscribers = ChimpListSegmentRepository.GetItemSubscribers(itemId, itemType);
                        if (subscribers != null)
                        {
                            emailList = subscribers.Where(x => x.StatusId == (int)BillingEnums.eAccessStatuses.ACTIVE && x.AddOn >= dateFrom).Select(x => x.Email).ToList();
                        }
                        break;
                    }


                    var count = 0;
                    foreach (var email in emailList)
                    {
                        emailParams.Add(email.GetEmailParameter());

                        if ((++count) % MAX_SEGMENT_SUBSCRIBE != 0)
                        {
                            continue;
                        }

                        var result = mc.AddStaticSegmentMembers(chimpKeysEntity.Uid, segmentId, emailParams);
                        HandleAddStaticSegmentMembersError(chimpKeysEntity.UserId, result);
                        emailParams.Clear();
                    }
                    if (emailParams.Count > 0)
                    {
                        var result = mc.AddStaticSegmentMembers(chimpKeysEntity.Uid, segmentId, emailParams);
                        HandleAddStaticSegmentMembersError(chimpKeysEntity.UserId, result);
                    }

                    segEntity.UpdateSegemntEntity(emailList.Count);
                    ChimpListSegmentRepository.Update(segEntity);
                    if (!ChimpListSegmentRepository.UnitOfWork.CommitAndRefreshChanges(out error))
                    {
                        return(false);
                    }
                }
            }
            catch (Exception exception)
            {
                error = FormatError(exception);
                Logger.Error("SaveListSubscribers", exception, listId, CommonEnums.LoggerObjectTypes.Mailchimp);
                return(false);
            }

            return(true);
        }
Exemple #3
0
 public void AddStaticSegmentMembers_Successful()
 {
     MailChimpManager mc = new MailChimpManager(TestGlobal.Test_APIKey);
     ListResult lists = mc.GetLists();
     List<StaticSegmentResult> segments = mc.GetStaticSegmentsForList(lists.Data[1].Id);
     EmailParameter email1 = new EmailParameter()
     {
         Email = "*****@*****.**"
     };
     List<EmailParameter> emails = new List<EmailParameter>();
     emails.Add(email1);
     StaticSegmentMembersAddResult result = mc.AddStaticSegmentMembers(lists.Data[1].Id,segments[0].StaticSegmentId,emails);
     Assert.IsTrue(result.successCount == 1);
 }
Exemple #4
0
        public string SendCampaign(int campaignId, string campaignName, IEnumerable <EmailRecipient> emails, IEnumerable <Company> Companies, string title, string subject,
                                   string content, string fromEmail, string fromName, string campaignKey, int accountId, byte?campaignType, string listName = null)
        {
            content      = content.Replace("*|CAMPID|*", campaignId.ToString()).Replace("<o:p>", "").Replace("</o:p>", "");//.FormatHTML();
            campaignName = Guid.NewGuid().ToString();
            var campaignCreateContent = campaignType == 132 ? new CampaignCreateContent {
                Text = content
            } : new CampaignCreateContent {
                HTML = content
            };
            var campaignCreateOptions = new CampaignCreateOptions
            {
                Title     = title,
                FromEmail = fromEmail,
                FromName  = fromName,
                Subject   = subject,
            };

            var list = default(ListInfo);

            if (string.IsNullOrWhiteSpace(listName))
            {
                list = mailChimpManager.GetLists().Data[0];
            }
            else
            {
                list = mailChimpManager.GetLists().Data.Where(li => string.Equals(li.Name, listName, StringComparison.OrdinalIgnoreCase)).FirstOrDefault();
            }

            campaignCreateOptions.ListId     = list.Id;
            campaignCreateOptions.AutoFooter = false;
            //subscribe every id to the list
            var batchEmailParameters           = new List <BatchEmailParameter>();
            var emailParameters                = new List <EmailParameter>();
            IEnumerable <string> mergervarlist = new List <string> {
                list.Id
            };
            MergeVarResult resultdata = mailChimpManager.GetMergeVars(mergervarlist);
            IEnumerable <MergeVarItemResult> mergevardata = resultdata.Data.Select(x => x.MergeVars).FirstOrDefault();

            // delete all mergervars
            foreach (var mergevar in mergevardata)
            {
                try
                {
                    mailChimpManager.DeleteMergeVar(list.Id, mergevar.Tag);
                }
                catch (Exception ex)
                {
                    Logger.Current.Error("Exception" + ex);
                }
            }

            //add mergevars
            var pc           = emails.FirstOrDefault();
            var fields       = (pc.ContactFields != null) ? pc.ContactFields.Keys : new List <string>();
            var defaultValue = string.Empty;
            var displayName  = string.Empty;

            foreach (var field in fields)
            {
                if (field.Contains("CF") || field.Contains("DF"))
                {
                    defaultValue = "XXXXX";
                    displayName  = field;
                }
                else
                {
                    var propInfo = typeof(RecipientMergeVar).GetProperties().Where(p => p.Name == field).FirstOrDefault();
                    if (propInfo != null)
                    {
                        displayName = propInfo.GetCustomAttributes(typeof(DisplayNameAttribute), true).Cast <DisplayNameAttribute>().FirstOrDefault().DisplayName;
                    }
                }
                mailChimpManager.AddMergeVar(list.Id, field, displayName, new MergeVarOptions()
                {
                    FieldType = "text", DefaultValue = defaultValue
                });
            }
            //set merge vars
            string replaceValue = string.Empty;

            foreach (var contact in emails)
            {
                var rmv = new RecipientMergeVar();

                if (contact.ContactFields != null && contact.ContactFields.Keys != null)
                {
                    var keys       = contact.ContactFields.Keys;
                    var properties = rmv.GetType().GetProperties();
                    foreach (var key in keys)
                    {
                        replaceValue = contact.ContactFields[key].ToString();
                        if (key.Contains("CF") || key.Contains("DF"))
                        {
                            //TODO

                            /*
                             * Write code to handle muliti select custom field.
                             */
                            try
                            {
                                mailChimpManager.SetMergeVar(list.Id, key, replaceValue);
                            }
                            catch (MailChimp.Errors.MailChimpAPIException e)
                            {
                                ExceptionHandler.Current.HandleException(e, DefaultExceptionPolicies.LOG_ONLY_POLICY);
                            }
                            catch (Exception e)
                            {
                                ExceptionHandler.Current.HandleException(e, DefaultExceptionPolicies.LOG_ONLY_POLICY);
                            }
                        }
                        else
                        {
                            var pi = properties.Where(p => p.Name == key).FirstOrDefault();
                            if (pi != null)
                            {
                                pi.SetValue(rmv, replaceValue);
                            }
                        }
                    }
                }
                batchEmailParameters.Add(new BatchEmailParameter
                {
                    Email = new EmailParameter {
                        Email = contact.EmailId
                    },
                    MergeVars = rmv
                });

                emailParameters.Add(new EmailParameter {
                    Email = contact.EmailId
                });
            }

            mailChimpManager.BatchSubscribe(list.Id, batchEmailParameters, doubleOptIn: false, updateExisting: true, replaceInterests: false);
            var segmentResult = mailChimpManager.AddStaticSegment(list.Id, campaignName);

            mailChimpManager.AddStaticSegmentMembers(list.Id, segmentResult.NewStaticSegmentID, emailParameters);
            var segmentOptions = new CampaignSegmentOptions();

            segmentOptions.Match      = "All";
            segmentOptions.Conditions = new List <CampaignSegmentCriteria>();
            segmentOptions.Conditions.Add(new CampaignSegmentCriteria {
                Field = "static_segment", Operator = "eq", Value = segmentResult.NewStaticSegmentID.ToString()
            });

            string cId = "";

            try
            {
                Campaign result = mailChimpManager.CreateCampaign("regular", campaignCreateOptions, campaignCreateContent, segmentOptions, null);
                cId = result.Id;
                mailChimpManager.SendCampaign(cId);
            }
            catch (MailChimp.Errors.MailChimpAPIException e)
            {
                ExceptionHandler.Current.HandleException(e, DefaultExceptionPolicies.LOG_AND_RETHROW_POLICY);
            }

            return(cId);
        }