コード例 #1
0
        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);
                }
            }
        }
コード例 #2
0
        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
        }
コード例 #3
0
 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);
 }
コード例 #4
0
        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);
                        }
                    }
                }
            }
        }
コード例 #5
0
        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));
        }