/// <summary>
        /// Prepare paged queued email list model
        /// </summary>
        /// <param name="searchModel">Queued email search model</param>
        /// <returns>Queued email list model</returns>
        public virtual QueuedEmailListModel PrepareQueuedEmailListModel(QueuedEmailSearchModel searchModel)
        {
            if (searchModel == null)
            {
                throw new ArgumentNullException(nameof(searchModel));
            }

            //get parameters to filter emails
            var startDateValue = !searchModel.SearchStartDate.HasValue ? null
                : (DateTime?)_dateTimeHelper.ConvertToUtcTime(searchModel.SearchStartDate.Value, _dateTimeHelper.CurrentTimeZone);
            var endDateValue = !searchModel.SearchEndDate.HasValue ? null
                : (DateTime?)_dateTimeHelper.ConvertToUtcTime(searchModel.SearchEndDate.Value, _dateTimeHelper.CurrentTimeZone).AddDays(1);

            //get queued emails
            var queuedEmails = _queuedEmailService.SearchEmails(fromEmail: searchModel.SearchFromEmail,
                                                                toEmail: searchModel.SearchToEmail,
                                                                createdFromUtc: startDateValue,
                                                                createdToUtc: endDateValue,
                                                                loadNotSentItemsOnly: searchModel.SearchLoadNotSent,
                                                                loadOnlyItemsToBeSent: false,
                                                                maxSendTries: searchModel.SearchMaxSentTries,
                                                                loadNewest: true,
                                                                pageIndex: searchModel.Page - 1, pageSize: searchModel.PageSize);

            //prepare list model
            var model = new QueuedEmailListModel
            {
                Data = queuedEmails.Select(queuedEmail =>
                {
                    //fill in model values from the entity
                    var queuedEmailModel = queuedEmail.ToModel <QueuedEmailModel>();

                    //little performance optimization: ensure that "Body" is not returned
                    queuedEmailModel.Body = string.Empty;

                    //convert dates to the user time
                    queuedEmailModel.CreatedOn = _dateTimeHelper.ConvertToUserTime(queuedEmail.CreatedOnUtc, DateTimeKind.Utc);

                    //fill in additional values (not existing in the entity)
                    //chai
                    //queuedEmailModel.PriorityName = queuedEmail.Priority.GetLocalizedEnum(_localizationService, _workContext);
                    queuedEmailModel.PriorityName = CommonHelper.ConvertEnum(queuedEmail.Priority.ToString());
                    if (queuedEmail.DontSendBeforeDateUtc.HasValue)
                    {
                        queuedEmailModel.DontSendBeforeDate = _dateTimeHelper
                                                              .ConvertToUserTime(queuedEmail.DontSendBeforeDateUtc.Value, DateTimeKind.Utc);
                    }

                    if (queuedEmail.SentOnUtc.HasValue)
                    {
                        queuedEmailModel.SentOn = _dateTimeHelper.ConvertToUserTime(queuedEmail.SentOnUtc.Value, DateTimeKind.Utc);
                    }

                    return(queuedEmailModel);
                }),
                Total = queuedEmails.TotalCount
            };

            return(model);
        }
Beispiel #2
0
        /// <summary>
        /// Executes a task
        /// </summary>
        public virtual void Execute()
        {
            var emailAccount = _settingService.LoadSetting <CommonSettings>(default(Guid));

            var maxTries     = 30;
            var queuedEmails = _queuedEmailService.SearchEmails(null, null, null, null,
                                                                true, true, maxTries, false, 0, 500);

            foreach (var queuedEmail in queuedEmails)
            {
                try
                {
                    _emailSender.SendEmail(emailAccount,
                                           queuedEmail.Subject,
                                           queuedEmail.Body,
                                           queuedEmail.From,
                                           queuedEmail.FromName,
                                           queuedEmail.To,
                                           queuedEmail.ToName);

                    queuedEmail.SentDate = DateTime.Now;
                }
                catch (Exception exc)
                {
                    _logger.Error(string.Format("Error sending e-mail. {0}", exc.Message), exc);
                }
                finally
                {
                    queuedEmail.SentTries = queuedEmail.SentTries + 1;
                    _queuedEmailService.UpdateQueuedEmail(queuedEmail);
                }
            }
        }
        public override async Task ExecuteAsync(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,
                    SendManually = false
                };

                var queuedEmails = await _queuedEmailService.SearchEmails(q).LoadAsync();

                foreach (var queuedEmail in queuedEmails)
                {
                    await _queuedEmailService.SendEmailAsync(queuedEmail);
                }

                if (!queuedEmails.HasNextPage)
                {
                    break;
                }
            }
        }
        /// <summary>
        /// Executes a task
        /// </summary>
        public void Execute()
        {
            var maxTries     = 3;
            var queuedEmails = _queuedEmailService.SearchEmails(null, null, null, null,
                                                                true, maxTries, false, 0, 10000);

            foreach (var queuedEmail in queuedEmails)
            {
                var bcc = String.IsNullOrWhiteSpace(queuedEmail.Bcc)
                            ? null
                            : queuedEmail.Bcc.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
                var cc = String.IsNullOrWhiteSpace(queuedEmail.CC)
                            ? null
                            : queuedEmail.CC.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);

                try
                {
                    _emailSender.SendEmail(queuedEmail.EmailAccount, queuedEmail.Subject, queuedEmail.Body,
                                           queuedEmail.From, queuedEmail.FromName, queuedEmail.To, queuedEmail.ToName, bcc, cc);

                    queuedEmail.SentOnUtc = DateTime.UtcNow;
                }
                catch
                {
                }
                finally
                {
                    queuedEmail.SentTries = queuedEmail.SentTries + 1;
                    _queuedEmailService.UpdateQueuedEmail(queuedEmail);
                }
            }
        }
Beispiel #5
0
        /// <summary>
        /// Executes a task
        /// </summary>
        public virtual void Execute()
        {
            var maxTries     = 3;
            var queuedEmails = _queuedEmailService.SearchEmails(null, null, null, null,
                                                                true, maxTries, false, 0, 500);

            foreach (var queuedEmail in queuedEmails)
            {
                var bcc = String.IsNullOrWhiteSpace(queuedEmail.Bcc)
                            ? null
                            : queuedEmail.Bcc.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
                var cc = String.IsNullOrWhiteSpace(queuedEmail.CC)
                            ? null
                            : queuedEmail.CC.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);

                try
                {
                    _emailSender.SendEmail(queuedEmail.EmailAccount, queuedEmail.Subject, queuedEmail.Body,
                                           queuedEmail.From, queuedEmail.FromName, queuedEmail.To, queuedEmail.ToName, bcc, cc,
                                           queuedEmail.AttachmentFilePath, queuedEmail.AttachmentFileName);

                    queuedEmail.SentOnUtc = DateTime.UtcNow;
                }
                catch (Exception exc)
                {
                    _logger.Error(string.Format("Error sending e-mail. {0}", exc.Message), exc);
                }
                finally
                {
                    queuedEmail.SentTries = queuedEmail.SentTries + 1;
                    _queuedEmailService.UpdateQueuedEmail(queuedEmail);
                }
            }
        }
        public void Execute(TaskExecutionContext ctx)
        {
            const int pageSize = 90;
            const int maxTries = 3;

            //for (int i = 0; i < 9999999; ++i)
            //{
            var q = new SearchEmailsQuery
            {
                MaxSendTries = maxTries,
                PageIndex    = 0,
                PageSize     = pageSize,
                Expand       = "Attachments",
                UnsentOnly   = true,
                SendManually = false
            };
            var queuedEmails = _queuedEmailService.SearchEmails(q);

            foreach (var queuedEmail in queuedEmails)
            {
                _queuedEmailService.SendEmail(queuedEmail);
            }

            //if (!queuedEmails.HasNextPage)
            //	break;
            //}
        }
Beispiel #7
0
 /// <summary>
 /// Search queued emails
 /// </summary>
 /// <param name="fromEmail">From Email</param>
 /// <param name="toEmail">To Email</param>
 /// <param name="createdFromUtc">Created date from (UTC); null to load all records</param>
 /// <param name="createdToUtc">Created date to (UTC); null to load all records</param>
 /// <param name="loadNotSentItemsOnly">A value indicating whether to load only not sent emails</param>
 /// <param name="loadOnlyItemsToBeSent">A value indicating whether to load only emails for ready to be sent</param>
 /// <param name="maxSendTries">Maximum send tries</param>
 /// <param name="loadNewest">A value indicating whether we should sort queued email descending; otherwise, ascending.</param>
 /// <param name="pageIndex">Page index</param>
 /// <param name="pageSize">Page size</param>
 /// <returns>Queued emails</returns>
 public IAPIPagedList <QueuedEmail> SearchEmails(string fromEmail,
                                                 string toEmail, DateTime?createdFromUtc, DateTime?createdToUtc,
                                                 bool loadNotSentItemsOnly, bool loadOnlyItemsToBeSent, int maxSendTries,
                                                 bool loadNewest, int pageIndex = 0, int pageSize = int.MaxValue)
 {
     return(_queuedEmailService.SearchEmails(fromEmail, toEmail, createdFromUtc, createdToUtc, loadNotSentItemsOnly, loadOnlyItemsToBeSent, maxSendTries, loadNewest, pageIndex, pageSize).ConvertPagedListToAPIPagedList());
 }
        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;
                }
            }
        }
Beispiel #9
0
        public ActionResult QueuedEmailList(DataTablesParam dataTableParam, QueuedEmailListModel model)
        {
            if (!_permissionService.Authorize(StandardPermissionProvider.ManageMessageQueue))
            {
                return(AccessDeniedView());
            }

            DateTime?startDateValue = (model.SearchStartDate == null) ? null
                            : (DateTime?)_dateTimeHelper.ConvertToUtcTime(model.SearchStartDate.Value, _dateTimeHelper.CurrentTimeZone);

            DateTime?endDateValue = (model.SearchEndDate == null) ? null
                            :(DateTime?)_dateTimeHelper.ConvertToUtcTime(model.SearchEndDate.Value, _dateTimeHelper.CurrentTimeZone).AddDays(1);

            //var queuedEmails = _queuedEmailService.SearchEmails(model.SearchFromEmail, model.SearchToEmail,
            //    startDateValue, endDateValue,
            //    model.SearchLoadNotSent, model.SearchMaxSentTries, true,
            //    dataTableParam.PageIndex, dataTableParam.PageSize);

            var q = new SearchEmailsQuery
            {
                EndTime       = endDateValue,
                From          = model.SearchFromEmail,
                MaxSendTries  = model.SearchMaxSentTries,
                OrderByLatest = true,
                PageIndex     = dataTableParam.PageIndex,
                PageSize      = dataTableParam.PageSize,
                SendManually  = model.SearchSendManually,
                StartTime     = startDateValue,
                To            = model.SearchToEmail,
                UnsentOnly    = model.SearchLoadNotSent
            };
            var queuedEmails = _queuedEmailService.SearchEmails(q);
            var total        = queuedEmails.Count();
            var result       = new DataTablesData
            {
                iTotalRecords        = total,
                sEcho                = dataTableParam.sEcho,
                iTotalDisplayRecords = total,
                aaData               = queuedEmails.Select(x =>
                {
                    var m       = x.ToModel();
                    m.CreatedOn = _dateTimeHelper.ConvertToUserTime(x.CreatedOnUtc, DateTimeKind.Utc);
                    if (x.SentOnUtc.HasValue)
                    {
                        m.SentOn = _dateTimeHelper.ConvertToUserTime(x.SentOnUtc.Value, DateTimeKind.Utc);
                    }
                    return(m);
                }).Cast <object>().ToArray(),
            };

            return(new JsonResult
            {
                Data = result
            });
        }
Beispiel #10
0
        /// <summary>
        /// Executes a task
        /// </summary>
        public void Execute()
        {
            var maxTries     = 3;
            var queuedEmails = _queuedEmailService.SearchEmails(null, null, null, null, true, maxTries, false, 0, 10000);

            foreach (var qe in queuedEmails)
            {
                var bcc = String.IsNullOrWhiteSpace(qe.Bcc)
                            ? null
                            : qe.Bcc.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
                var cc = String.IsNullOrWhiteSpace(qe.CC)
                            ? null
                            : qe.CC.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);

                try
                {
                    var smtpContext = new SmtpContext(qe.EmailAccount);

                    var msg = new EmailMessage(
                        new EmailAddress(qe.To, qe.ToName),
                        qe.Subject,
                        qe.Body,
                        new EmailAddress(qe.From, qe.FromName));

                    if (qe.ReplyTo.HasValue())
                    {
                        msg.ReplyTo.Add(new EmailAddress(qe.ReplyTo, qe.ReplyToName));
                    }

                    if (cc != null)
                    {
                        msg.Cc.AddRange(cc.Where(x => x.HasValue()).Select(x => new EmailAddress(x)));
                    }

                    if (bcc != null)
                    {
                        msg.Bcc.AddRange(bcc.Where(x => x.HasValue()).Select(x => new EmailAddress(x)));
                    }

                    _emailSender.SendEmail(smtpContext, msg);

                    qe.SentOnUtc = DateTime.UtcNow;
                }
                catch (Exception exc)
                {
                    Logger.Error(string.Format("Error sending e-mail: {0}", exc.Message), exc);
                }
                finally
                {
                    qe.SentTries = qe.SentTries + 1;
                    _queuedEmailService.UpdateQueuedEmail(qe);
                }
            }
        }
Beispiel #11
0
        public ActionResult QueuedEmailList(DataSourceRequest command, QueuedEmailListModel model)
        {
            if (!_permissionService.Authorize(StandardPermissionProvider.ManageMessageQueue))
            {
                return(AccessDeniedView());
            }

            var startDateValue = (model.SearchStartDate == null)
                ? null
                : (DateTime?)
                                 _dateTimeHelper.ConvertToUtcTime(model.SearchStartDate.Value, _dateTimeHelper.CurrentTimeZone);

            var endDateValue = (model.SearchEndDate == null)
                ? null
                : (DateTime?)
                               _dateTimeHelper.ConvertToUtcTime(model.SearchEndDate.Value, _dateTimeHelper.CurrentTimeZone)
                               .AddDays(1);

            var queuedEmails = _queuedEmailService.SearchEmails(model.SearchFromEmail, model.SearchToEmail,
                                                                startDateValue, endDateValue,
                                                                model.SearchLoadNotSent, model.SearchMaxSentTries, true,
                                                                command.Page - 1, command.PageSize);
            var gridModel = new DataSourceResult
            {
                Data = queuedEmails.Select(x =>
                {
                    var m          = x.ToModel();
                    m.PriorityName = x.Priority.GetLocalizedEnum(_localizationService, _workContext);
                    m.CreatedOn    = _dateTimeHelper.ConvertToUserTime(x.CreatedOnUtc, DateTimeKind.Utc);
                    if (x.SentOnUtc.HasValue)
                    {
                        m.SentOn = _dateTimeHelper.ConvertToUserTime(x.SentOnUtc.Value, DateTimeKind.Utc);
                    }

                    //little hack here:
                    //ensure that email body is not returned
                    //otherwise, we can get the following error if emails have too long body:
                    //"Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property. "
                    //also it improves performance
                    m.Body = "";

                    return(m);
                }),
                Total = queuedEmails.TotalCount
            };

            return(new JsonResult
            {
                Data = gridModel
            });
        }
        public ActionResult QueuedEmailList(GridCommand command, QueuedEmailListModel model)
        {
            var gridModel = new GridModel <QueuedEmailModel>();

            if (_permissionService.Authorize(StandardPermissionProvider.ManageMessageQueue))
            {
                DateTime?startDateValue = (model.SearchStartDate == null) ? null : (DateTime?)_dateTimeHelper.ConvertToUtcTime(model.SearchStartDate.Value, _dateTimeHelper.CurrentTimeZone);
                DateTime?endDateValue   = (model.SearchEndDate == null) ? null : (DateTime?)_dateTimeHelper.ConvertToUtcTime(model.SearchEndDate.Value, _dateTimeHelper.CurrentTimeZone).AddDays(1);

                var q = new SearchEmailsQuery
                {
                    EndTime       = endDateValue,
                    From          = model.SearchFromEmail,
                    MaxSendTries  = model.SearchMaxSentTries,
                    OrderByLatest = true,
                    PageIndex     = command.Page - 1,
                    PageSize      = command.PageSize,
                    SendManually  = model.SearchSendManually,
                    StartTime     = startDateValue,
                    To            = model.SearchToEmail,
                    UnsentOnly    = model.SearchLoadNotSent
                };
                var queuedEmails = _queuedEmailService.SearchEmails(q);

                gridModel.Data = queuedEmails.Select(x =>
                {
                    var m       = x.ToModel();
                    m.CreatedOn = _dateTimeHelper.ConvertToUserTime(x.CreatedOnUtc, DateTimeKind.Utc);

                    if (x.SentOnUtc.HasValue)
                    {
                        m.SentOn = _dateTimeHelper.ConvertToUserTime(x.SentOnUtc.Value, DateTimeKind.Utc);
                    }

                    return(m);
                });

                gridModel.Total = queuedEmails.TotalCount;
            }
            else
            {
                gridModel.Data = Enumerable.Empty <QueuedEmailModel>();

                NotifyAccessDenied();
            }

            return(new JsonResult
            {
                Data = gridModel
            });
        }
Beispiel #13
0
        public HttpResponseMessage QueuedEmailList(HttpRequestMessage request, QueuedEmailListVM model, int pageIndex = 0, int pageSize = int.MaxValue)
        {
            return(CreateHttpResponse(request, () =>
            {
                HttpResponseMessage response = request.CreateErrorResponse(HttpStatusCode.NotFound, "No items found");
                if (true)
                {
                    DateTime?startDateValue = (model.SearchStartDate == null) ? null
                            : (DateTime?)_dateTimeHelper.ConvertToUtcTime(model.SearchStartDate.Value, _dateTimeHelper.CurrentTimeZone);

                    DateTime?endDateValue = (model.SearchEndDate == null) ? null
                                    : (DateTime?)_dateTimeHelper.ConvertToUtcTime(model.SearchEndDate.Value, _dateTimeHelper.CurrentTimeZone).AddDays(1);

                    var queuedEmails = _queuedEmailService.SearchEmails(model.SearchFromEmail, model.SearchToEmail,
                                                                        startDateValue, endDateValue, model.SearchLoadNotSent, false, model.SearchMaxSentTries, true, pageIndex, pageSize);
                    var gridModel = new DataSourceResult
                    {
                        Data = queuedEmails.Select(x => {
                            var m = x.ToModel();
                            m.PriorityName = x.Priority.GetLocalizedEnum(_localizationService, _baseService.WorkContext);
                            m.CreatedOn = _dateTimeHelper.ConvertToUserTime(x.CreatedOnUtc, DateTimeKind.Utc);
                            if (x.DontSendBeforeDateUtc.HasValue)
                            {
                                m.DontSendBeforeDate = _dateTimeHelper.ConvertToUserTime(x.DontSendBeforeDateUtc.Value, DateTimeKind.Utc);
                            }
                            if (x.SentOnUtc.HasValue)
                            {
                                m.SentOn = _dateTimeHelper.ConvertToUserTime(x.SentOnUtc.Value, DateTimeKind.Utc);
                            }

                            //little performance optimization: ensure that "Body" is not returned
                            m.Body = "";

                            return m;
                        }),
                        Total = queuedEmails.TotalCount
                    };

                    response = request.CreateResponse <DataSourceResult>(HttpStatusCode.OK, gridModel);
                }
                else
                {
                    response = request.CreateResponse(HttpStatusCode.Unauthorized, "Unauthorized user");
                }
                return response;
            }));
        }
        public ActionResult QueuedEmailList(DataSourceRequest command, QueuedEmailListModel model)
        {
            if (!_permissionService.Authorize(StandardPermissionProvider.ManageMessageQueue))
            {
                return(AccessDeniedView());
            }

            DateTime?startDateValue = (model.SearchStartDate == null) ? null
                            : (DateTime?)_dateTimeHelper.ConvertToUtcTime(model.SearchStartDate.Value, _dateTimeHelper.CurrentTimeZone);

            DateTime?endDateValue = (model.SearchEndDate == null) ? null
                            :(DateTime?)_dateTimeHelper.ConvertToUtcTime(model.SearchEndDate.Value, _dateTimeHelper.CurrentTimeZone).AddDays(1);

            var queuedEmails = _queuedEmailService.SearchEmails(model.SearchFromEmail, model.SearchToEmail,
                                                                startDateValue, endDateValue,
                                                                model.SearchLoadNotSent, false, model.SearchMaxSentTries, true,
                                                                command.Page - 1, command.PageSize);
            var gridModel = new DataSourceResult
            {
                Data = queuedEmails.Select(x => {
                    var m          = x.ToModel();
                    m.PriorityName = x.Priority.GetLocalizedEnum(_localizationService, _workContext);
                    m.CreatedOn    = _dateTimeHelper.ConvertToUserTime(x.CreatedOnUtc, DateTimeKind.Utc);
                    if (x.DontSendBeforeDateUtc.HasValue)
                    {
                        m.DontSendBeforeDate = _dateTimeHelper.ConvertToUserTime(x.DontSendBeforeDateUtc.Value, DateTimeKind.Utc);
                    }
                    if (x.SentOnUtc.HasValue)
                    {
                        m.SentOn = _dateTimeHelper.ConvertToUserTime(x.SentOnUtc.Value, DateTimeKind.Utc);
                    }

                    //little performance optimization: ensure that "Body" is not returned
                    m.Body = "";

                    return(m);
                }),
                Total = queuedEmails.TotalCount
            };

            return(new JsonResult
            {
                Data = gridModel
            });
        }
Beispiel #15
0
        /// <summary>
        /// Prepare paged queued email list model
        /// </summary>
        /// <param name="searchModel">Queued email search model</param>
        /// <returns>Queued email list model</returns>
        public virtual QueuedEmailListModel PrepareQueuedEmailListModel(QueuedEmailSearchModel searchModel)
        {
            if (searchModel == null)
            {
                throw new ArgumentNullException(nameof(searchModel));
            }

            //get parameters to filter emails
            var startDateValue = searchModel.SearchStartDate?.ToUniversalTime();
            var endDateValue   = searchModel.SearchEndDate?.ToUniversalTime().AddDays(1);

            //get queued emails
            var queuedEmails = _queuedEmailService.SearchEmails(fromEmail: searchModel.SearchFromEmail,
                                                                toEmail: searchModel.SearchToEmail,
                                                                createdFromUtc: startDateValue,
                                                                createdToUtc: endDateValue,
                                                                loadNotSentItemsOnly: searchModel.SearchLoadNotSent,
                                                                maxSendTries: searchModel.SearchMaxSentTries,
                                                                pageIndex: searchModel.Page - 1, pageSize: searchModel.PageSize);

            //prepare list model
            var model = new QueuedEmailListModel().PrepareToGrid(searchModel, queuedEmails, () =>
            {
                return(queuedEmails.Select(queuedEmail =>
                {
                    //fill in model values from the entity
                    var queuedEmailModel = queuedEmail.ToModel <QueuedEmailModel>();

                    //little performance optimization: ensure that "Body" is not returned
                    queuedEmailModel.Body = string.Empty;

                    //convert dates to the user time
                    queuedEmailModel.CreatedOn = queuedEmail.CreatedOnUtc.ToLocalTime();

                    if (queuedEmail.SentOnUtc.HasValue)
                    {
                        queuedEmailModel.SentOn = queuedEmail.SentOnUtc.Value.ToLocalTime();
                    }

                    return queuedEmailModel;
                }));
            });

            return(model);
        }
        /// <summary>
        /// Executes a task
        /// </summary>
        public virtual void Execute()
        {
            OnBeforeExecute?.Invoke(this, new EventArgs());
            const int maxTries     = 3;
            var       queuedEmails = _queuedEmailService.SearchEmails(null, null, null, null,
                                                                      true, true, maxTries, false, 0, 500);

            foreach (var queuedEmail in queuedEmails)
            {
                var bcc = string.IsNullOrWhiteSpace(queuedEmail.Bcc)
                            ? null
                            : queuedEmail.Bcc.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
                var cc = string.IsNullOrWhiteSpace(queuedEmail.CC)
                            ? null
                            : queuedEmail.CC.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);

                try
                {
                    _emailSender.SendEmail(_emailAccountService.GetEmailAccountById(queuedEmail.EmailAccountId),
                                           queuedEmail.Subject,
                                           queuedEmail.Body,
                                           queuedEmail.From,
                                           queuedEmail.FromName,
                                           queuedEmail.To,
                                           queuedEmail.ToName,
                                           queuedEmail.ReplyTo,
                                           queuedEmail.ReplyToName,
                                           bcc,
                                           cc);

                    queuedEmail.SentOnUtc = DateTime.UtcNow;
                }
                catch (Exception exc)
                {
                    _logger.Error($"Error sending e-mail. {exc.Message}", exc);
                }
                finally
                {
                    queuedEmail.SentTries += 1;
                    _queuedEmailService.UpdateQueuedEmail(queuedEmail);
                }
            }
            OnAfterExecute?.Invoke(this, new EventArgs());
        }
        /// <summary>
        /// Executes a task
        /// </summary>
        public void Execute()
        {
            var maxTries     = 3;
            var queuedEmails = _queuedEmailService.SearchEmails(null, null, null, null,
                                                                true, maxTries, false, 1, 1000).ToList();

            Debug.WriteLine(string.Format("run time:{0}", DateTime.Now));
            foreach (var queuedEmail in queuedEmails)
            {
                var bcc = String.IsNullOrWhiteSpace(queuedEmail.Bcc)
                            ? null
                            : queuedEmail.Bcc.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
                var cc = String.IsNullOrWhiteSpace(queuedEmail.CC)
                            ? null
                            : queuedEmail.CC.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);


                if (_queuedEmailService.EmailSendStatus(queuedEmail.Id))
                {
                    continue;
                }
                try
                {
                    #if DEBUG
                    #else
                   #endif

                    Debug.WriteLine(string.Format("before send: {0}:{1}:{2}:{3})", queuedEmail.Id, queuedEmail.CreatedOnUtc, queuedEmail.SentTries, DateTime.Now));
                    _emailSender.SendEmail(queuedEmail.EmailAccount, queuedEmail.Subject, queuedEmail.Body,
                                           queuedEmail.From, queuedEmail.FromName, queuedEmail.To, queuedEmail.ToName, bcc, cc);
                    Debug.WriteLine(string.Format("after send: {0}:{1}:{2}:{3})", queuedEmail.Id, queuedEmail.CreatedOnUtc, queuedEmail.SentTries, DateTime.Now));
                    queuedEmail.SentOnUtc = DateTime.UtcNow;
                }
                catch (Exception exc)
                {
                    _logger.Error(string.Format("Error sending e-mail. {0}", exc.Message), exc);
                }
                finally
                {
                    queuedEmail.SentTries = queuedEmail.SentTries + 1;
                    _queuedEmailService.Update(queuedEmail);
                }
            }
        }
        public async Task <IActionResult> QueuedEmailList(DataSourceRequest command, QueuedEmailListModel model)
        {
            DateTime?startDateValue = (model.SearchStartDate == null) ? null
                            : (DateTime?)_dateTimeService.ConvertToUtcTime(model.SearchStartDate.Value, _dateTimeService.CurrentTimeZone);

            DateTime?endDateValue = (model.SearchEndDate == null) ? null
                            : (DateTime?)_dateTimeService.ConvertToUtcTime(model.SearchEndDate.Value, _dateTimeService.CurrentTimeZone).AddDays(1);

            var queuedEmails = await _queuedEmailService.SearchEmails(model.SearchFromEmail, model.SearchToEmail, model.SearchText,
                                                                      startDateValue, endDateValue,
                                                                      model.SearchLoadNotSent, false, model.SearchMaxSentTries, true,
                                                                      command.Page - 1, command.PageSize);

            var gridModel = new DataSourceResult
            {
                Data = queuedEmails.Select((Func <QueuedEmail, QueuedEmailModel>)(x =>
                {
                    var m          = x.ToModel();
                    m.PriorityName = TranslateExtensions.GetTranslationEnum <QueuedEmailPriority>(x.PriorityId, (ITranslationService)_translationService, (IWorkContext)_workContext);
                    m.CreatedOn    = _dateTimeService.ConvertToUserTime(x.CreatedOnUtc, DateTimeKind.Utc);
                    if (x.DontSendBeforeDateUtc.HasValue)
                    {
                        m.DontSendBeforeDate = _dateTimeService.ConvertToUserTime(x.DontSendBeforeDateUtc.Value, DateTimeKind.Utc);
                    }
                    if (x.SentOnUtc.HasValue)
                    {
                        m.SentOn = _dateTimeService.ConvertToUserTime(x.SentOnUtc.Value, DateTimeKind.Utc);
                    }
                    if (x.ReadOnUtc.HasValue)
                    {
                        m.ReadOn = _dateTimeService.ConvertToUserTime(x.ReadOnUtc.Value, DateTimeKind.Utc);
                    }

                    m.Body = "";

                    return(m);
                })),
                Total = queuedEmails.TotalCount
            };

            return(Json(gridModel));
        }
        public void Execute(TaskExecutionContext ctx)
        {
            const int pageSize = 100;
            const int maxTries = 3;

            for (int i = 0; i < 9999999; ++i)
            {
                var queuedEmails = _queuedEmailService.SearchEmails(null, null, null, null, true, maxTries, false, i, pageSize, false);

                foreach (var queuedEmail in queuedEmails)
                {
                    _queuedEmailService.SendEmail(queuedEmail);
                }

                if (!queuedEmails.HasNextPage)
                {
                    break;
                }
            }
        }
Beispiel #20
0
        public ActionResult QueuedEmailList(DataSourceRequest command, QueuedEmailListModel model)
        {
            DateTime?startDateValue = model.SearchStartDate;
            DateTime?endDateValue   = model.SearchEndDate;
            //DateTime? startDateValue = (model.SearchStartDate == null) ? null
            //               : (DateTime?)_dateTimeHelper.ConvertToUtcTime(model.SearchStartDate.Value, _dateTimeHelper.CurrentTimeZone);

            //DateTime? endDateValue = (model.SearchEndDate == null) ? null
            //                : (DateTime?)_dateTimeHelper.ConvertToUtcTime(model.SearchEndDate.Value, _dateTimeHelper.CurrentTimeZone).AddDays(1);

            //var queuedEmails = _queuedEmailService.GetAllEmails();
            var queuedEmails = _queuedEmailService.SearchEmails(model.SearchFromEmail, model.SearchToEmail,
                                                                startDateValue, endDateValue, model.SearchLoadNotSent, false,
                                                                model.SearchMaxSentTries, true, command.Page - 1, command.PageSize);
            var gridModel = new DataSourceResult
            {
                Data  = queuedEmails,
                Total = queuedEmails.Count()
            };

            return(Json(gridModel));
        }
Beispiel #21
0
        public ActionResult QueuedEmailList(GridCommand command, QueuedEmailListModel model)
        {
            if (!_permissionService.Authorize(StandardPermissionProvider.ManageMessageQueue))
            {
                return(AccessDeniedView());
            }

            DateTime?startDateValue = (model.SearchStartDate == null) ? null : (DateTime?)_dateTimeHelper.ConvertToUtcTime(model.SearchStartDate.Value, _dateTimeHelper.CurrentTimeZone);

            DateTime?endDateValue = (model.SearchEndDate == null) ? null : (DateTime?)_dateTimeHelper.ConvertToUtcTime(model.SearchEndDate.Value, _dateTimeHelper.CurrentTimeZone).AddDays(1);

            var queuedEmails = _queuedEmailService.SearchEmails(model.SearchFromEmail, model.SearchToEmail,
                                                                startDateValue, endDateValue,
                                                                model.SearchLoadNotSent, model.SearchMaxSentTries, true,
                                                                command.Page - 1, command.PageSize, model.SearchSendManually);

            var gridModel = new GridModel <QueuedEmailModel>
            {
                Data = queuedEmails.Select(x =>
                {
                    var m       = x.ToModel();
                    m.CreatedOn = _dateTimeHelper.ConvertToUserTime(x.CreatedOnUtc, DateTimeKind.Utc);

                    if (x.SentOnUtc.HasValue)
                    {
                        m.SentOn = _dateTimeHelper.ConvertToUserTime(x.SentOnUtc.Value, DateTimeKind.Utc);
                    }

                    return(m);
                }),
                Total = queuedEmails.TotalCount
            };

            return(new JsonResult
            {
                Data = gridModel
            });
        }
Beispiel #22
0
        public IActionResult QueuedEmailList(DataSourceRequest command, QueuedEmailListModel model)
        {
            DateTime?startDateValue = (model.SearchStartDate == null) ? null
                            : (DateTime?)_dateTimeHelper.ConvertToUtcTime(model.SearchStartDate.Value, _dateTimeHelper.CurrentTimeZone);

            DateTime?endDateValue = (model.SearchEndDate == null) ? null
                            :(DateTime?)_dateTimeHelper.ConvertToUtcTime(model.SearchEndDate.Value, _dateTimeHelper.CurrentTimeZone).AddDays(1);

            var queuedEmails = _queuedEmailService.SearchEmails(model.SearchFromEmail, model.SearchToEmail,
                                                                startDateValue, endDateValue,
                                                                model.SearchLoadNotSent, false, model.SearchMaxSentTries, true,
                                                                command.Page - 1, command.PageSize);
            var gridModel = new DataSourceResult
            {
                Data = queuedEmails.Select(x => {
                    var m          = x.ToModel();
                    m.PriorityName = x.Priority.GetLocalizedEnum(_localizationService, _workContext);
                    m.CreatedOn    = _dateTimeHelper.ConvertToUserTime(x.CreatedOnUtc, DateTimeKind.Utc);
                    if (x.DontSendBeforeDateUtc.HasValue)
                    {
                        m.DontSendBeforeDate = _dateTimeHelper.ConvertToUserTime(x.DontSendBeforeDateUtc.Value, DateTimeKind.Utc);
                    }
                    if (x.SentOnUtc.HasValue)
                    {
                        m.SentOn = _dateTimeHelper.ConvertToUserTime(x.SentOnUtc.Value, DateTimeKind.Utc);
                    }

                    m.Body = "";

                    return(m);
                }),
                Total = queuedEmails.TotalCount
            };

            return(Json(gridModel));
        }