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); }
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); }
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); }
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); }