Exemplo n.º 1
0
        public string SendSurveyEmail(RouterContact routerContact, out bool error, ListrakRest listrak)
        {
            error = false;
            RouterUser user = null;

            try
            {
                user = GetRouterUser(routerContact.RouterContactId);
            }
            catch (Exception e)
            {
                error = true;
                return(e.ToString());
            }

            //if (user.PrecisionSampleUserID == null)
            //{
            //    error = true;
            //    return $"No precision sample id for {routerContact.Email}";
            //}

            var routerReturnContainer = GetUserSurveys(Guid.Parse(user.UniqueId), user.IpAddress);

            string message = null;

            if (!routerReturnContainer.RouterReturnList.Any())
            {
                error   = true;
                message = $"No surveys found.{Environment.NewLine}{routerReturnContainer.Message}";
                return(message);
            }

            if (routerReturnContainer.RouterReturnList.Count > 2)
            {
                var result = listrak.SendDailySurveysEmail(user, routerReturnContainer.RouterReturnList, out message);
                if (result)
                {
                    return("Email Sent");
                }
            }
            else
            {
                error = true;
                return("Less than 3 surveys. Email not sent.");
            }



            error = true;
            return("Email was not sent successfully. " + message);
        }
Exemplo n.º 2
0
        public string SendSurveyEmail(string emailAddress, string ipAddress)
        {
            RouterUser user = null;

            try
            {
                user = GetRouterUser(emailAddress);
            }
            catch (Exception e)
            {
                return(e.ToString());
            }

            var routerReturnContainer = GetUserSurveys(Guid.Parse(user.UniqueId), ipAddress);

            //var user = mgr.GetRouterUser(Guid.Parse("B1E269BC-99A5-4B96-A095-06A9CD56D446"));

            var    l = new ListrakRest();
            string message;
            var    result = l.SendDailySurveysEmail(user, routerReturnContainer.RouterReturnList, out message);

            return(result ? "Email Sent" : "Email was not sent successfully. " + message);
        }
Exemplo n.º 3
0
        public void SendEmailToAllRouterContacts(int max, int safetyHours)
        {
            DateTime        startTime = DateTime.Now;
            List <DateTime> TimeFor10 = new List <DateTime>()
            {
                DateTime.Now
            };
            var    errors        = new List <string>();
            string errorFilename = $"error-{DateTime.Now:yyyy-MM-dd_hh-mm-ss-tt}.txt";

            //create it here and pass so the auth headers are only created once.
            var listrak        = new ListrakRest();
            var routerContacts = GetRouterContactsForEmailRun(max, safetyHours);

            OnProgress(new ProgressEventArgs($"{routerContacts.Count} routercontact records to process."));

            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start();

            int counter = 0;

            try
            {
                foreach (RouterContact routerContact in routerContacts)
                {
                    CurrentEmail = routerContact.Email;
                    if (counter > 0 && counter % 10 == 0)
                    {
                        TimeFor10.Add(DateTime.Now);
                        OnProgress(new ProgressEventArgs($"{counter} records processed."));
                    }
                    counter++;
                    //Check safety hours. This prevents emails from being sent out too
                    //close to when the last one was set. Initial setting is 12 hours.
                    if (routerContact.DailySurveyEmailSentDate.HasValue)
                    {
                        var debug = routerContact.Email;
                        if (routerContact.DailySurveyEmailSentDate.Value.AddHours(safetyHours) > DateTime.Now)
                        {
                            OnProgress(new ProgressEventArgs($"Skipping {routerContact.Email}"));

                            continue;
                        }
                    }

                    bool   error  = false;
                    string result = SendSurveyEmail(routerContact, out error, listrak);
                    if (!error)
                    {
                        //var db2 = new GloshareDbContext();
                        routerContact.DailySurveyEmailSentDate = DateTime.Now;
                        OnProgress(new ProgressEventArgs($"Sent {routerContact.Email}."));
                    }
                    if (error)
                    {
                        if (result.ToLower().Contains("unsubscribe") || result.ToLower().Contains("suppressed"))
                        {
                            routerContact.Removed = true;
                        }
                        else
                        {
                            routerContact.ErrorOut = true;
                            var rc = new RouterContact()
                            {
                                Email           = routerContact.Email,
                                InsertDate      = routerContact.InsertDate,
                                RouterContactId = routerContact.RouterContactId,
                                UniqueId        = routerContact.UniqueId
                            };
                            string err = ($"{result}{Environment.NewLine}{JsonConvert.SerializeObject(rc)}{Environment.NewLine}{new string('=',50)}{Environment.NewLine}");
                            File.AppendAllText(@"Logs\" + errorFilename, err);
                            OnProgress(new ProgressEventArgs($"Error: {err}"));
                        }
                    }

                    SetStatusForRouterContact(routerContact);

                    if (stopwatch.Elapsed.TotalMinutes > 58)
                    {
                        OnProgress(new ProgressEventArgs($"Exit early due to running for {stopwatch.Elapsed.TotalMinutes} minutes."));
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                WriteRunStats(startTime, TimeFor10, routerContacts.Count, e);
                throw;
            }

            WriteRunStats(startTime, TimeFor10, routerContacts.Count, null);
        }