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