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