public void Execute(TaskExecutionContext ctx) { const int pageSize = 1000; const int maxTries = 3; for (int i = 0; i < 9999999; ++i) { var q = new SearchEmailsQuery { MaxSendTries = maxTries, PageIndex = i, PageSize = pageSize, Expand = "Attachments", UnsentOnly = true }; var queuedEmails = _queuedEmailService.SearchEmails(q); foreach (var queuedEmail in queuedEmails) { _queuedEmailService.SendEmail(queuedEmail); } if (!queuedEmails.HasNextPage) { break; } } }
public virtual IPagedList <QueuedEmail> SearchEmails(SearchEmailsQuery query) { Guard.ArgumentNotNull(() => query); var q = _queuedEmailRepository.Table; if (query.Expand.HasValue()) { var expands = query.Expand.Split(','); foreach (var expand in expands) { q = q.Expand(expand.Trim()); } } if (query.From.HasValue()) { q = q.Where(qe => qe.From.Contains(query.From.Trim())); } if (query.To.HasValue()) { q = q.Where(qe => qe.To.Contains(query.To.Trim())); } if (query.StartTime.HasValue) { q = q.Where(qe => qe.CreatedOnUtc >= query.StartTime); } if (query.EndTime.HasValue) { q = q.Where(qe => qe.CreatedOnUtc <= query.EndTime); } if (query.UnsentOnly) { q = q.Where(qe => !qe.SentOnUtc.HasValue); } if (query.SendManually.HasValue) { q = q.Where(qe => qe.SendManually == query.SendManually.Value); } q = q.Where(qe => qe.SentTries < query.MaxSendTries); q = q.OrderByDescending(qe => qe.Priority); q = query.OrderByLatest ? ((IOrderedQueryable <QueuedEmail>)q).ThenByDescending(qe => qe.CreatedOnUtc) : ((IOrderedQueryable <QueuedEmail>)q).ThenBy(qe => qe.CreatedOnUtc); var queuedEmails = new PagedList <QueuedEmail>(q, query.PageIndex, query.PageSize); return(queuedEmails); }