Ejemplo n.º 1
0
        public void CampaignCreate_Successful()
        {
            // Arrange
            MailChimpManager       mc             = new MailChimpManager(TestGlobal.Test_APIKey);
            ListResult             lists          = mc.GetLists();
            string                 listID         = lists.Data[1].Id;
            CampaignSegmentOptions segmentOptions = new CampaignSegmentOptions();

            segmentOptions.Match = "All";
            string dateListCreated = lists.Data[1].DateCreated;

            segmentOptions.Conditions = new List <CampaignSegmentCriteria>();
            segmentOptions.Conditions.Add(new CampaignSegmentCriteria {
                Field = "date", Operator = "eq", Value = dateListCreated
            });
            CampaignCreateContent content = new CampaignCreateContent();

            content.HTML = "<p>Testing</p>";
            CampaignCreateOptions options = new CampaignCreateOptions();

            options.Title     = "Testing";
            options.ListId    = listID;
            options.ToName    = "Test Name";
            options.FromEmail = "*****@*****.**";
            options.FromName  = "Testing Company Name";
            options.Subject   = "Test Subject";

            //Act
            Campaign result = mc.CreateCampaign("regular", options, content, segmentOptions, null);

            // Assert
            Assert.IsNotNull(result);
        }
Ejemplo n.º 2
0
        public string SendTransactionalEmail(string recipientEmail, string content, string title, string fromName, string fromEmail, string subject
                                             , string emailName, string listName = null)
        {
            var emailContent = new CampaignCreateContent {
                HTML = content
            };
            var emailOptions = 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();
            }

            emailOptions.ListId     = list.Id;
            emailOptions.AutoFooter = false;
            var batchEmailParameters = new List <BatchEmailParameter>();
            var emailParameters      = new List <EmailParameter>();

            batchEmailParameters.Add(new BatchEmailParameter
            {
                Email = new EmailParameter {
                    Email = recipientEmail
                },
            });
            emailParameters.Add(new EmailParameter {
                Email = recipientEmail
            });
            mailChimpManager.BatchSubscribe(list.Id, batchEmailParameters, doubleOptIn: false, updateExisting: true, replaceInterests: false);
            var segmentResult = mailChimpManager.AddStaticSegment(list.Id, emailName);

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

            Campaign result = mailChimpManager.CreateCampaign("regular", emailOptions, emailContent, segmentOptions, null);
            string   cId    = result.Id;

            mailChimpManager.SendCampaign(cId);
            return(cId);
        }
Ejemplo n.º 3
0
        /// <summary>
        ///Allows one to test their segmentation rules before creating a campaign using them.
        /// </summary>
        /// <param name="listId">The list id to test</param>
        /// <param name="options">The segmentation options to apply</param>
        /// <returns></returns>
        public CampaignSegmentTestResult CampaignSegmentTest(string listId, CampaignSegmentOptions options)
        {
            //  Our api action:
            string apiAction = "campaigns/segment-test";

            //  Create our arguments object:
            object args = new
            {
                apikey  = this.APIKey,
                list_id = listId,
                options = options
            };

            //  Make the call:
            return(MakeAPICall <CampaignSegmentTestResult>(apiAction, args));
        }
Ejemplo n.º 4
0
        public void SendCampaign()
        {
            if ((cmbTemplate.SelectedIndex > 0 && cmbTemplate.SelectedItem != null) && (cmbList.SelectedIndex > 0 && cmbList.SelectedItem != null))
            {
                Int32 selectedTemplateId = Convert.ToInt32(cmbTemplate.SelectedValue);

                string selectedListId = cmbList.SelectedValue.ToString();
                //IEnumerable<string> listEnum = new string[] { selectedListId.ToString() };

                //--Create Campaign
                CampaignSegmentOptions segmentOptions = new CampaignSegmentOptions();
                segmentOptions.Match = "All";
                CampaignCreateOptions options = new CampaignCreateOptions();
                options.Title      = mailchimptitle;
                options.ListId     = selectedListId;
                options.ToName     = mailchimpToName;
                options.FromEmail  = mailchimpFromEmail;
                options.FromName   = mailchimpFromName;
                options.Subject    = mailchimpSubject;
                options.TemplateID = selectedTemplateId;
                CampaignCreateContent content = new CampaignCreateContent();
                Campaign result = mc.CreateCampaign("regular", options, content, null, null);


                //GetMemberInfo
                if (chkEnableSMS.Checked)
                {
                    List <EmailParameter> emails  = new List <EmailParameter>();
                    MembersResult         results = mc.GetAllMembersForList(selectedListId, "subscribed", 0, 100);
                    foreach (var i in results.Data)
                    {
                        foreach (var j in i.MemberMergeInfo)
                        {
                            if (j.Key.Trim() == "PHONE")
                            {
                                if (!string.IsNullOrEmpty(j.Value.ToString()))
                                {
                                    //  SmsSender.SendSMS(j.Value.ToString(), "919460264151", "5b2a23d7", "59d9fa03", Uri.EscapeUriString("Test Message"));
                                }
                            }
                        }
                    }
                }
            }
            MessageBox.Show("Success");
            this.Close();
        }
Ejemplo n.º 5
0
        public void CampaignSavedSegmentTest_Successful()
        {
            //  Arrange
            MailChimpManager mc    = new MailChimpManager(TestGlobal.Test_APIKey);
            ListResult       lists = mc.GetLists();

            Assert.IsNotNull(lists);
            Assert.IsTrue(lists.Data.Count > 0);
            string listID = lists.Data[1].Id;
            CampaignSegmentOptions options = new CampaignSegmentOptions();

            options.SavedSegmentId = "yourSavedSegmentId";

            //  Act
            CampaignSegmentTestResult result = mc.CampaignSegmentTest(listID, options);

            //  Assert
            Assert.IsTrue(result.Total > 0);
        }
Ejemplo n.º 6
0
        public void CampaignSegmentTest_Successful()
        {
            //  Arrange
            MailChimpManager       mc      = new MailChimpManager(TestGlobal.Test_APIKey);
            ListResult             lists   = mc.GetLists();
            CampaignSegmentOptions options = new CampaignSegmentOptions();

            options.Match = "All";
            string dateListCreated = lists.Data[1].DateCreated;
            List <CampaignSegmentCriteria> conditions = new List <CampaignSegmentCriteria>();

            conditions.Add(new CampaignSegmentCriteria {
                Field = "date", Operator = "eq", Value = dateListCreated
            });
            options.Conditions = conditions;
            string listId = lists.Data[1].Id;
            //  Act
            CampaignSegmentTestResult result = mc.CampaignSegmentTest(listId, options);

            //  Assert
            Assert.IsTrue(result.Total == 1);
        }
Ejemplo n.º 7
0
        /// <summary>
        ///Create a new draft campaign to send. You can not have more than 32,000 campaigns in your account.
        ///See http://apidocs.mailchimp.com/api/2.0/campaigns/create.php for explanation of full options.
        /// </summary>
        /// <param name="type">The Campaign Type to create - one of "regular", "plaintext", "absplit", "rss", "auto"</param>
        /// <param name="options">A struct of the standard options for this campaign.</param>
        /// <param name="content">The content for this campaign </param>
        /// <param name="segmentOptions">optional - if you wish to do Segmentation with this campaign this array should contain: see CampaignSegmentTest(). It's suggested that you test your options against campaignSegmentTest().</param>
        /// <param name="typeOptions">optional - various extra options based on the campaign type</param>
        /// <returns></returns>
        public Campaign CreateCampaign(string type, CampaignCreateOptions options, CampaignCreateContent content, CampaignSegmentOptions segmentOptions = null, CampaignTypeOptions typeOptions = null)
        {
            //  Our api action:
            string apiAction = "campaigns/create";

            //  Create our arguments object:
            object args = new
            {
                apikey       = this.APIKey,
                type         = type,
                options      = options,
                content      = content,
                segment_opts = segmentOptions,
                type_opts    = typeOptions
            };

            //  Make the call:
            return(MakeAPICall <Campaign>(apiAction, args));
        }
        /// <summary>
        /// Exports/dumps members of a list and all of their associated details.
        /// This is a very similar to exporting via the web interface.
        /// </summary>
        /// <param name="listId">the list id to connect to (can be gathered using GetLists())</param>
        /// <param name="status">optional - the status to get members for - one of(subscribed, unsubscribed, cleaned)</param>
        /// <param name="segment">refine the members list by segments (maximum of 5 conditions)</param>
        /// <param name="since">only return member whose data has changed since a GMT timestamp – in YYYY-MM-DD HH:mm:ss format</param>
        /// <param name="hashed"> if, instead of full list data, you'd prefer a hashed list of email addresses, set this to the hashing algorithm you expect. Currently only "sha256" is supported. NOT IN USE NOW</param>
        /// <returns></returns>
        public List <Dictionary <string, string> > GetAllMembersForList(string listId, string status = "subscribed", CampaignSegmentOptions segment = null, string since = "1900-01-01 00:00:00", string hashed = "")
        //int start = 0, int limit = 25, string sort_field = "", string sort_dir = "ASC", CampaignSegmentOptions segment = null)
        {
            //  Our api action:
            string apiAction = "list";

            //  Create our arguments object:
            object args = new
            {
                apikey = this.APIKey,
                id     = listId,
                status = status,
                //segment = segment,
                since = since,
                //hashed = hashed
            };

            //  Make the call:
            return(MakeExportAPICall(apiAction, args));
        }
Ejemplo n.º 9
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);
        }