public static void SendEmails()
        {
            try
            {
                var emailsSent = 0;

                var session = XpoHelper.GetNewSession();
                XPQuery<Phonebook> phonebookQuery = session.Query<Phonebook>();
                List<Phonebook> phonebooks = (from p in phonebookQuery where p.ImportTasks.Count > 0 select p).ToList();

                foreach (Phonebook phonebook in phonebooks)
                {
                    phonebook.ImportTasks.Reload();

                    foreach (ImportTask importTask in phonebook.ImportTasks)
                    {
                        if (importTask.ImportTaskConfiguration.Steps() > 0)
                        {
                            phonebook.Employees.Reload();
                            importTask.UpdateRequests.Reload();
                            importTask.Filters.Reload();

                            List<Employee> filteredEmployees = importTask.FilteredEmployeesWithUpdateRequests(session);

                            foreach (Employee employee in filteredEmployees)
                            {
                                int nextStep = importTask.NextRequiredStepForEmployee(employee);
                                int lastStepCompleted = importTask.UpdateRequestStepCompletedForEmployee(employee);
                                int maxSteps = importTask.ImportTaskConfiguration.Steps();
                                UpdateRequest lastCompletedUpdateRequest = importTask.LastCompletedUpdateRequestForEmployee(employee);
                                UpdateRequest nextUpdateRequest = importTask.UpdateRequestForEmployeeWithStep(nextStep, employee);

                                var isReminder = false;

                                if (nextStep > 0 && nextStep <= maxSteps)
                                {
                                    bool shouldSendEmail = false;

                                    if (lastCompletedUpdateRequest != null)
                                    {
                                        // send email if now is x days after last step completed . date &&
                                        // if sent date is not null and later than x days after sent
                                        if (lastCompletedUpdateRequest.CompletedDate.HasBeenSet())
                                        {
                                            if (lastCompletedUpdateRequest.CompletedDate.TimeUntilNow().Minutes > importTask.ImportTaskConfiguration.DaysBetweenEmails)
                                            {
                                                if (nextUpdateRequest.LastSentDate.HasBeenSet() == false)
                                                {
                                                    shouldSendEmail = true;
                                                }
                                                else if (nextUpdateRequest.LastSentDate.TimeUntilNow().Minutes > importTask.ImportTaskConfiguration.DaysBetweenEmails)
                                                {
                                                    shouldSendEmail = true;
                                                }
                                                else if (nextUpdateRequest.LastSentDate.TimeUntilNow().Minutes > importTask.ImportTaskConfiguration.DaysUntilEmailReminder)
                                                {
                                                    isReminder = true;
                                                    shouldSendEmail = true;
                                                }
                                            }
                                        }
                                    }
                                    else if (nextUpdateRequest != null)
                                    {
                                        // send email if sent date is not null and later than x days after sent
                                        if (nextUpdateRequest.LastSentDate.HasBeenSet() == false)
                                        {
                                            shouldSendEmail = true;
                                        }
                                        else if (nextUpdateRequest.LastSentDate.TimeUntilNow().Minutes > importTask.ImportTaskConfiguration.DaysBetweenEmails)
                                        {
                                            shouldSendEmail = true;
                                        }
                                        else if (nextUpdateRequest.LastSentDate.TimeUntilNow().Minutes > importTask.ImportTaskConfiguration.DaysUntilEmailReminder)
                                        {
                                            isReminder = true;
                                            shouldSendEmail = true;
                                        }
                                    }

                                    if (shouldSendEmail)
                                    {
                                        // create new update request
                                        employee.Reload();
                                        UpdateRequest nextRequest = importTask.UpdateRequestForEmployeeWithStep(lastStepCompleted + 1, employee);

                                        if (nextRequest != null)
                                        {
                                            ImportTaskEmail email = importTask.ImportTaskConfiguration.ImportTaskEmails.ToList<ImportTaskEmail>().Where(x => x.Step == nextStep).FirstOrDefault();
                                            string emailLink = Utilities.Domain() + UrlManager.EmployeeEditWithRequestUpdateOid(nextRequest.Oid);

                                            string name = String.IsNullOrEmpty(employee.FullName()) ? "there" : employee.FullName();
                                            string subject = String.IsNullOrEmpty(email.Subject) == false ? email.Subject : "Update your data";
                                            subject = subject.Replace(EmployeeFullNamePlaceHolder, name);

                                            if (isReminder)
                                            {
                                                subject += " (Reminder)";
                                            }

                                            string emailText = email.EmailText;
                                            string toEmail = employee.EmailAddress;

                                            string body = emailText + "<br/>" + emailLink;
                                            body = body.Replace(EmployeeFullNamePlaceHolder, employee.FullName());

                                            Email mail = new Email()
                                            {
                                                Subject = subject,
                                                ToEmail = toEmail,
                                                Body = body
                                            };

                                            ValidationResult validation = new EmailValidator().Validate(mail);

                                            if (validation.IsValid == true)
                                            {
                                                if (nextRequest.OriginalSentDate.HasBeenSet() == false)
                                                {
                                                    nextRequest.OriginalSentDate = DateTime.Now;
                                                }

                                                nextRequest.LastSentDate = DateTime.Now;
                                                nextRequest.TimesSent++;
                                                nextRequest.Save();
                                                Debug.WriteLine("Sending email to: " + toEmail + " with body: " + body);

                                                if (toEmail == "*****@*****.**")
                                                {
                                                    mail.Authenticate("*****@*****.**", "yfwlmyeevmvbdbjq").Send();
                                                }

                                                emailsSent++;
                                            }
                                            else
                                            {
                                                Debug.WriteLine("Error sending email to: " + toEmail + " with error: " + String.Join(",", validation.Errors));
                                            }
                                        }
                                        else
                                        {
                                            Debug.WriteLine("Next request was null - meaning employee is done.");
                                        }
                                    }
                                }
                            }
                        }
                    }
                }

                session.Disconnect();
                session.Dispose();
                Debug.Write(emailsSent + " would be sent /n");
            }
            catch (Exception e)
            {
                Debug.Write("background email task threw ex" + e);
            }
        }