private void UpdateStatus(EmailStatus status, ResendEmail email, XElement errors) { int count = 0; while (true) { try { using (EmailBounceBackDataContext ctx = new EmailBounceBackDataContext()) { var eml = ctx.ResendEmails.Single(e => e.EmailID == email.EmailID); if (status == EmailStatus.InProgress) { eml.InProgress = true; eml.StartTime = DateTime.Now; eml.EndTime = null; } else { eml.Status = status.ToString(); eml.RetryCount = eml.RetryCount.GetValueOrDefault() + 1; eml.EndTime = DateTime.Now; eml.InProgress = null; eml.Errors = errors; } ctx.SubmitChanges(); } break; } catch (Exception e) { // Increment the retry counter count++; // Log the exception //ConfigLogger.Instance.Log(count < 5 ? LogSeverity.Warning : LogSeverity.Error, email.EmailID, e); LogProvider.Log(GetType()).Error(e); // Retry up to 5 times if (count >= 5) { break; } // Sleep for a fraction Thread.Sleep(50); } } }
static Settings() { #region General Settings using (var ctx = new EmailBounceBackDataContext()) { try { EmailMonitorInterval = TimeSpan.Parse(ctx.Settings.Single(s => s.Name == "Interval.EmailMonitor").Value); } catch { EmailMonitorInterval = TimeSpan.FromMinutes(1); } try { EmailResenderInterval = TimeSpan.Parse(ctx.Settings.Single(s => s.Name == "Interval.EmailResender").Value); } catch { EmailResenderInterval = TimeSpan.FromMinutes(5); } try { ConcurrencyLevel = int.Parse(ctx.Settings.Single(s => s.Name == "ConcurrencyLevel").Value); } catch { ConcurrencyLevel = Environment.ProcessorCount; } var setting = ctx.Settings.SingleOrDefault(s => s.Name == "DefaultEscalationEmail"); DefaultEscalationEmail = (setting == null) ? null : setting.Value; if (String.IsNullOrWhiteSpace(DefaultEscalationEmail)) { throw new Exception("DefaultEscalationEmail setting must contain a valid email address."); } } #endregion #region Mailboxes MailboxProfiles = new Dictionary <Guid, MailProfile>(); LoadMailboxProfiles(); #endregion }
private bool Validate(int DocumentID, string ConnectionString) { //check if document id is valid GetDataContext(ConnectionString, "Documents"); using (EmailBounceBackDataContext ctx = new EmailBounceBackDataContext(ConnectionString)) { var exists = ctx.Documents.Where(x => x.DocumentID == DocumentID).FirstOrDefault(); if (exists == null) { return(false); } } return(true); }
public static void LoadMailboxProfiles() { MailboxProfiles.Clear(); XmlSerializer serializer = new XmlSerializer(typeof(MailProfile)); using (var ctx = new EmailBounceBackDataContext()) { foreach (var mailbox in ctx.MailBoxes) { using (TextReader reader = new StringReader(mailbox.ProfileObject)) { var profile = (MailProfile)serializer.Deserialize(reader); if (profile.Enabled) { MailboxProfiles.Add(mailbox.MailboxGUID, profile); } } } } }
private IEnumerable <ResendEmail> GetEmailQueue() { List <ResendEmail> emails = new List <ResendEmail>(); using (var ctx = new EmailBounceBackDataContext()) { foreach (var profile in Settings.MailboxProfiles.Values.Where(m => m.Enabled)) { var retryTime = DateTime.Now.Subtract(profile.TimeBetweenRetries); emails.AddRange((from email in ctx.ResendEmails where (email.MailboxGUID == profile.MailboxGUID) && (email.InProgress == null || email.InProgress == false) && ((email.Status == null) || (email.Status == "Error" && (email.EndTime == null || email.EndTime.Value < retryTime) && (email.RetryCount.GetValueOrDefault() <= profile.MaximumRetries))) select email)); } } return(emails.OrderBy(e => e.EmailID)); }