private SubscribeResult SubscribeOrInvite(string members, SubscribeAction action, SubscribeOptions options = SubscribeOptions.None) { var result = new SubscribeResult(); if (!String.IsNullOrWhiteSpace(members)) { var req = new RestRequest(); req.AddParameter("subscribees", members); req.AddParameter("subscribe_or_invite", action == SubscribeAction.Subscribe ? 0 : 1); req.AddParameter("send_welcome_msg_to_this_batch", options.HasFlag(SubscribeOptions.SendWelcomeMessage).ToInt()); req.AddParameter("send_notifications_to_list_owner", options.HasFlag(SubscribeOptions.NotifyOwner).ToInt()); var resp = this.GetClient().ExecutePostAdminRequest(_addPage, req); var doc = GetHtmlDocument(resp.Content); string verb = action == SubscribeAction.Invite ? "invited" : "subscribed"; string xpath = String.Format("//h5[contains(translate(text(), 'SI', 'si'), 'successfully {0}')]/following-sibling::ul[1]/li", verb); foreach (var node in doc.DocumentNode.SafeSelectNodes(xpath)) result.Subscribed.Add(node.InnerText.Trim()); verb = action == SubscribeAction.Invite ? "inviting" : "subscribing"; xpath = String.Format("//h5[contains(translate(text(), 'ESI', 'esi'),'error {0}')]/following-sibling::ul[1]/li", verb); foreach (var node in doc.DocumentNode.SafeSelectNodes(xpath)) { var match = Regex.Match(node.InnerText, "(.*) -- (.*)"); var email = match.Groups[1].Value; var reason = match.Groups[2].Value; if (Regex.IsMatch(reason, "Already", RegexOptions.IgnoreCase)) result.AlreadyMembers.Add(email); else if (Regex.IsMatch(reason, "Bad/Invalid", RegexOptions.IgnoreCase)) result.BadEmails.Add(email); } if (action == SubscribeAction.Subscribe && _emailListPopulated) PopulateEmailList(); } return result; }