Exemple #1
0
        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));
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        /// <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);
        }
Exemple #4
0
        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"));
        }
Exemple #6
0
        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"]);
        }
Exemple #7
0
        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"]);

        }
Exemple #10
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);
        }
        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");
        }