public bool SaveListSubscribers(int listId, out string error) { CHIMP_UserLists chimpKeysEntity; if (!GetChimpKeys(listId, out chimpKeysEntity, out error)) { return(false); } var mc = new MailChimpManager(chimpKeysEntity.ApiKey); try { var subscriberList = ChimpUserListRepository.GetAuthorSubscribers(chimpKeysEntity.UserId); var emailList = new List <BatchEmailParameter>(); var count = 0; var rejected = 0; foreach (var crsLearnerToken in subscriberList) { emailList.Add(crsLearnerToken.GetBatchEmailParameter()); if ((++count) % MAX_LIST_SUBSCRIBE != 0) { continue; } var batchResult = mc.BatchSubscribe(chimpKeysEntity.Uid, emailList, false, true); rejected += batchResult.ErrorCount; HandleBatchSubscribeRejects(chimpKeysEntity.UserId, batchResult); emailList.Clear(); } if (emailList.Count > 0) { var batchResult = mc.BatchSubscribe(chimpKeysEntity.Uid, emailList, false, true); rejected += batchResult.ErrorCount; HandleBatchSubscribeRejects(chimpKeysEntity.UserId, batchResult); } chimpKeysEntity.UpdateUserListEntity(count - rejected); ChimpUserListRepository.Update(chimpKeysEntity); if (!ChimpUserListRepository.UnitOfWork.CommitAndRefreshChanges(out error)) { return(false); } } catch (Exception exception) { error = FormatError(exception); Logger.Error("SaveListSubscribers", exception, listId, CommonEnums.LoggerObjectTypes.Mailchimp); return(false); } return(SaveSegmentSubscribers(listId, out error)); }
public void BatchSubscribe_Successful() { // Arrange MailChimpManager mc = new MailChimpManager(TestGlobal.Test_APIKey); ListResult lists = mc.GetLists(); List <BatchEmailParameter> emails = new List <BatchEmailParameter>(); BatchEmailParameter email1 = new BatchEmailParameter() { Email = new EmailParameter() { Email = "*****@*****.**" } }; BatchEmailParameter email2 = new BatchEmailParameter() { Email = new EmailParameter() { Email = "*****@*****.**" } }; emails.Add(email1); emails.Add(email2); // Act BatchSubscribeResult results = mc.BatchSubscribe(lists.Data[1].Id, emails); // Assert Assert.IsNotNull(results); Assert.IsTrue(results.AddCount == 2); }
/// <summary> /// Batches the subscribe. /// </summary> /// <param name="recordList">The records</param> public virtual BatchSubscribeResult BatchSubscribe(IEnumerable <MailChimpEventQueueRecord> recordList) { if (String.IsNullOrEmpty(_mailChimpSettings.DefaultListId)) { throw new ArgumentException("MailChimp list is not specified"); } MailChimpManager mc = new MailChimpManager(_mailChimpSettings.ApiKey); List <BatchEmailParameter> emailList = new List <BatchEmailParameter>(); foreach (var sub in recordList) { emailList.Add(new BatchEmailParameter() { Email = new EmailParameter() { Email = sub.Email } }); } BatchSubscribeResult listSubscribeOutput = mc.BatchSubscribe(_mailChimpSettings.DefaultListId, emailList, false, true); return(listSubscribeOutput); }
public void AddSubscriber(string firstName, string lastName, string email) { try { var manager = new MailChimpManager(Settings.MailChimpApiKey); var list = new List <BatchEmailParameter>(); var subscriber = new BatchEmailParameter() { Email = new EmailParameter() { Email = email }, MergeVars = new MergeVar() { { "FNAME", firstName }, { "LNAME", lastName } } }; list.Add(subscriber); var result = manager.BatchSubscribe(Settings.MailChimpAllSubscriberListId, list, false); } catch (Exception) { // TODO: Log the exception } }
public ActionResult Update(string id) { var defaultEvent = service.GetDefaultEvent(); int eventid = defaultEvent.ID; MailChimpManager mc = new MailChimpManager(_mailchimpKey); ListInfo mailingList = mc.GetLists().Data.Where(l => l.Id == id).SingleOrDefault(); List <BatchEmailParameter> batchList = new List <BatchEmailParameter>(); if (mailingList.Name.Contains("Speakers")) { foreach (var speaker in service.GetSpeakers(eventid)) { MyMergeVar myMergeVars = new MyMergeVar(); myMergeVars.FirstName = speaker.FirstName; myMergeVars.LastName = speaker.LastName; // Create the email parameter BatchEmailParameter batchEmail = new BatchEmailParameter(); EmailParameter email = new EmailParameter() { Email = speaker.Email }; batchEmail.Email = email; batchEmail.MergeVars = myMergeVars; batchList.Add(batchEmail); } } if (mailingList.Name.Contains("Attendees")) { foreach (var attendee in service.GetAllAttendees(eventid)) { MyMergeVar myMergeVars = new MyMergeVar(); myMergeVars.FirstName = attendee.FirstName; myMergeVars.LastName = attendee.LastName; // Create the email parameter EmailParameter email = new EmailParameter() { Email = attendee.Email }; BatchEmailParameter batchEmail = new BatchEmailParameter(); batchEmail.Email = email; batchEmail.MergeVars = myMergeVars; batchList.Add(batchEmail); } } BatchSubscribeResult bResult = mc.BatchSubscribe(id, batchList, false, true, true); //MyMergeVar myMergeVars = new MyMergeVar(); //myMergeVars.FirstName = subscriber.FirstName; //myMergeVars.LastName = subscriber.LastName; // Create the email parameter //EmailParameter email = new EmailParameter() //{ // Email = subscriber.EmailAddress //}; //EmailParameter results = mc.Subscribe(_mailchimpGroupId, email, myMergeVars); return(RedirectToAction("Index")); }
public void BatchSubscribe_Successful() { // Arrange MailChimpManager mc = new MailChimpManager(TestGlobal.Test_APIKey); ListResult lists = mc.GetLists(); List <BatchEmailParameter> emails = new List <BatchEmailParameter>(); BatchEmailParameter email1 = new BatchEmailParameter() { Email = new EmailParameter() { Email = "*****@*****.**" } }; MergeVar mVar1 = new MergeVar(); mVar1.Add("FNAME", "first1" + DateTime.Now); mVar1.Add("LNAME", "last1" + DateTime.Now); email1.MergeVars = mVar1; emails.Add(email1); BatchEmailParameter email2 = new BatchEmailParameter() { Email = new EmailParameter() { Email = "*****@*****.**" } }; MergeVar mVar2 = new MergeVar(); mVar2.Add("FNAME", "first2" + DateTime.Now); mVar2.Add("LNAME", "last2" + DateTime.Now); email2.MergeVars = mVar2; emails.Add(email2); // Act BatchSubscribeResult results = mc.BatchSubscribe(lists.Data[0].Id, emails); // Assert Assert.IsNotNull(results); Assert.IsTrue(results.AddCount == 2); // load List <EmailParameter> emailsP = new List <EmailParameter>(); emailsP.Add(email1.Email); MemberInfoResult memberInfo = mc.GetMemberInfo(lists.Data[0].Id, emailsP); Assert.AreEqual(mVar1["FNAME"], memberInfo.Data[0].MemberMergeInfo["FNAME"]); Assert.AreEqual(mVar1["LNAME"], memberInfo.Data[0].MemberMergeInfo["LNAME"]); }
public void BatchSubscribe_Successful() { // Arrange MailChimpManager mc = new MailChimpManager(TestGlobal.Test_APIKey); ListResult lists = mc.GetLists(); List<BatchEmailParameter> emails = new List<BatchEmailParameter>(); BatchEmailParameter email1 = new BatchEmailParameter() { Email = new EmailParameter() { Email = "*****@*****.**" } }; BatchEmailParameter email2 = new BatchEmailParameter() { Email = new EmailParameter() { Email = "*****@*****.**" } }; emails.Add(email1); emails.Add(email2); // Act BatchSubscribeResult results = mc.BatchSubscribe(lists.Data[1].Id, emails); // Assert Assert.IsNotNull(results); Assert.IsTrue(results.AddCount == 2); }
/// <summary> /// Batches the subscribe. /// </summary> /// <param name="recordList">The records</param> public virtual BatchSubscribeResult BatchSubscribe(IEnumerable<MailChimpEventQueueRecord> recordList) { if (string.IsNullOrEmpty(_mailChimpSettings.DefaultListId)) throw new ArgumentException("MailChimp list is not specified"); var mc = new MailChimpManager(_mailChimpSettings.ApiKey); var batchEmailParam = new List<BatchEmailParameter>(); foreach (var sub in recordList) { try { var emailParam = new EmailParameter { Email = sub.Email }; var mergeVars = new MergeVar(); // TODO Customize your merge vars // get customer and attributes var customer = _customerService.GetCustomerByEmail(sub.Email); if (customer != null) { AddAttribute(mergeVars, customer, SystemCustomerAttributeNames.FirstName, "FNAME"); AddAttribute(mergeVars, customer, SystemCustomerAttributeNames.LastName, "LNAME"); AddAttribute(mergeVars, customer, SystemCustomerAttributeNames.Phone, "PHONE"); var gender = customer.GetAttribute<string>(SystemCustomerAttributeNames.Gender); switch (gender) { case "F": mergeVars.Add("GENDER", "Mujer"); break; case "M": mergeVars.Add("GENDER", "Hombre"); break; default: mergeVars.Add("GENDER", "No especificado"); break; } } //add to group mergeVars.Groupings = new List<Grouping>() {new Grouping()}; mergeVars.Groupings[0].Name = "Yo soy"; mergeVars.Groupings[0].GroupNames = new List<string> { "Deportista" }; batchEmailParam.Add(new BatchEmailParameter() { Email = emailParam, MergeVars = mergeVars }); } catch (Exception ex) { _log.Warning(string.Format("Could not register email {0} to Mailchimp", sub.Email), ex); } } BatchSubscribeResult results = mc.BatchSubscribe(_mailChimpSettings.DefaultListId, batchEmailParam, true, true, false); return results; }
public void BatchSubscribe_Successful() { // Arrange MailChimpManager mc = new MailChimpManager(TestGlobal.Test_APIKey); ListResult lists = mc.GetLists(); List<BatchEmailParameter> emails = new List<BatchEmailParameter>(); BatchEmailParameter email1 = new BatchEmailParameter() { Email = new EmailParameter() { Email = "*****@*****.**" } }; MergeVar mVar1 = new MergeVar(); mVar1.Add("FNAME", "first1" + DateTime.Now); mVar1.Add("LNAME", "last1" + DateTime.Now); email1.MergeVars = mVar1; emails.Add(email1); BatchEmailParameter email2 = new BatchEmailParameter() { Email = new EmailParameter() { Email = "*****@*****.**" } }; MergeVar mVar2 = new MergeVar(); mVar2.Add("FNAME", "first2" + DateTime.Now); mVar2.Add("LNAME", "last2" + DateTime.Now); email2.MergeVars = mVar2; emails.Add(email2); // Act BatchSubscribeResult results = mc.BatchSubscribe(lists.Data[0].Id, emails); // Assert Assert.IsNotNull(results); Assert.IsTrue(results.AddCount == 2); // load List<EmailParameter> emailsP = new List<EmailParameter>(); emailsP.Add(email1.Email); MemberInfoResult memberInfo = mc.GetMemberInfo(lists.Data[0].Id, emailsP); Assert.AreEqual(mVar1["FNAME"], memberInfo.Data[0].MemberMergeInfo["FNAME"]); Assert.AreEqual(mVar1["LNAME"], memberInfo.Data[0].MemberMergeInfo["LNAME"]); }
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); }
public ActionResult Update(string id) { var defaultEvent = service.GetDefaultEvent(); int eventid = defaultEvent.ID; MailChimpManager mc = new MailChimpManager(_mailchimpKey); ListInfo mailingList = mc.GetLists().Data.Where(l=>l.Id==id).SingleOrDefault(); List<BatchEmailParameter> batchList = new List<BatchEmailParameter>(); if (mailingList.Name.Contains("Speakers")) { foreach (var speaker in service.GetSpeakers(eventid)) { MyMergeVar myMergeVars = new MyMergeVar(); myMergeVars.FirstName = speaker.FirstName; myMergeVars.LastName = speaker.LastName; // Create the email parameter BatchEmailParameter batchEmail = new BatchEmailParameter(); EmailParameter email = new EmailParameter() { Email = speaker.Email }; batchEmail.Email = email; batchEmail.MergeVars = myMergeVars; batchList.Add(batchEmail); } } if (mailingList.Name.Contains("Attendees")) { foreach (var attendee in service.GetAllAttendees(eventid)) { MyMergeVar myMergeVars = new MyMergeVar(); myMergeVars.FirstName = attendee.FirstName; myMergeVars.LastName = attendee.LastName; // Create the email parameter EmailParameter email = new EmailParameter() { Email = attendee.Email }; BatchEmailParameter batchEmail = new BatchEmailParameter(); batchEmail.Email = email; batchEmail.MergeVars = myMergeVars; batchList.Add(batchEmail); } } BatchSubscribeResult bResult = mc.BatchSubscribe(id, batchList, false, true, true); //MyMergeVar myMergeVars = new MyMergeVar(); //myMergeVars.FirstName = subscriber.FirstName; //myMergeVars.LastName = subscriber.LastName; // Create the email parameter //EmailParameter email = new EmailParameter() //{ // Email = subscriber.EmailAddress //}; //EmailParameter results = mc.Subscribe(_mailchimpGroupId, email, myMergeVars); return RedirectToAction("Index"); }