private static GetRestResponse MailGunEmailValidation(string resource, string parameter, GetRestRequest request) { var mailGunApiKey = System.Configuration.ConfigurationManager.AppSettings["mailgun_apikey"]; var mailGunUrl = System.Configuration.ConfigurationManager.AppSettings["mailgun_url"]; GetRestResponse response = new GetRestResponse(); RestClient client = new RestClient(); client.BaseUrl = new Uri(mailGunUrl); client.Authenticator = new HttpBasicAuthenticator("api", mailGunApiKey); RestRequest Request = new RestRequest(); Request.Resource = resource; Request.AddParameter(parameter, request.Email); response.RestResponse = client.Execute(Request); return(response); }
/// <summary> /// Mailgun verification for bulk contacts /// </summary> private void MailgunVerification(List <RawContact> contacts) { var mailGunList = new List <IEnumerable <string> >(); var interimMailList = new List <string>(); var mailLengthList = contacts .Where(c => !string.IsNullOrEmpty(c.PrimaryEmail)) .Select(c => new { Email = c.PrimaryEmail, Length = (c.PrimaryEmail.Length + 1) }) //adding + 1 to consider comma in final string .Distinct(); var maxSize = 4000; int sum = 0; int index = 0; foreach (var mail in mailLengthList) { index++; sum = sum + mail.Length; if (sum >= maxSize) { mailGunList.Add(interimMailList); interimMailList = new List <string>(); interimMailList.Add(mail.Email); sum = mail.Length; } interimMailList.Add(mail.Email); if (index == mailLengthList.Count()) { mailGunList.Add(interimMailList); } } foreach (var mailsToCheck in mailGunList) { var emails = string.Join(",", mailsToCheck); GetRestResponse response = mailGunService.BulkEmailValidate(new GetRestRequest() { Email = emails }); JavaScriptSerializer js = new JavaScriptSerializer(); dynamic restResponse = js.Deserialize <dynamic>(response.RestResponse.Content); if (restResponse != null) { string[] valid = ((IEnumerable)restResponse["parsed"]).Cast <object>().Select(x => x.ToString()).ToArray(); string[] notvalid = ((IEnumerable)restResponse["unparseable"]).Cast <object>().Select(x => x.ToString()).ToArray(); contacts = contacts.Join(valid, c => c.PrimaryEmail, v => v, (c, v) => c).ToList(); foreach (RawContact contact in contacts) { contact.EmailStatus = (byte)EmailStatus.Verified; } contacts = contacts.Join(notvalid, c => c.PrimaryEmail, v => v, (c, v) => c).ToList(); foreach (RawContact contact in contacts) { contact.EmailStatus = (byte)EmailStatus.HardBounce; } } else { contacts.ForEach(p => p.EmailStatus = (byte)EmailStatus.NotVerified); } } importDataRepository.InsertImportContactEmailStatuses(contacts); }