Example #1
0
        private List <Pair> getPlan()
        {
            var plan = new List <Pair>();

            var web_db        = new WebModelContainer();
            var emailAccounts = web_db.EmailAccounts.ToList();

            int pos   = 0;
            int total = Bcc.Count;

            foreach (var acct in emailAccounts)
            {
                if (!acct.Verified)
                {
                    continue;
                }
                var dailyCount = acct.DailyCounts.Where(d => d.WhichDate == DateTime.Today).SingleOrDefault();
                if (dailyCount == null)
                {
                    dailyCount = new DailyCount
                    {
                        WhichDate      = DateTime.Today,
                        Count          = 0,
                        EmailAccount   = acct,
                        EmailAccountId = acct.Id,
                    };
                    web_db.DailyCounts.Add(dailyCount);
                    web_db.SaveChanges();
                }
                if (dailyCount.Count >= acct.SmtpDailyLimit)
                {
                    continue;
                }

                var msg          = new MailMessage();
                int perTimeCount = 0;
                while ((pos < total) && (dailyCount.Count < acct.SmtpDailyLimit) && (perTimeCount < acct.SmtpPerTimeLimit))
                {
                    msg.Bcc.Add(Bcc.ElementAt(pos));
                    pos++;
                    dailyCount.Count++;
                    perTimeCount++;
                }

                msg.Subject    = Subject;
                msg.Body       = Body;
                msg.IsBodyHtml = true;
                msg.From       = new MailAddress(acct.From);
                plan.Add(new Pair(acct, msg));

                if (pos == total)
                {
                    break;
                }
            }
            web_db.Dispose();
            return(plan);
        }