Exemplo n.º 1
0
        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);
        }