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