Ejemplo n.º 1
0
        /// <returns>A task that represents the asynchronous operation</returns>
        public virtual async Task <IActionResult> Edit(QueuedEmailModel model, bool continueEditing)
        {
            if (!await _permissionService.AuthorizeAsync(StandardPermissionProvider.ManageMessageQueue))
            {
                return(AccessDeniedView());
            }

            //try to get a queued email with the specified id
            var email = await _queuedEmailService.GetQueuedEmailByIdAsync(model.Id);

            if (email == null)
            {
                return(RedirectToAction("List"));
            }

            if (ModelState.IsValid)
            {
                email = model.ToEntity(email);
                email.DontSendBeforeDateUtc = model.SendImmediately || !model.DontSendBeforeDate.HasValue ?
                                              null : (DateTime?)_dateTimeHelper.ConvertToUtcTime(model.DontSendBeforeDate.Value);
                await _queuedEmailService.UpdateQueuedEmailAsync(email);

                _notificationService.SuccessNotification(await _localizationService.GetResourceAsync("Admin.System.QueuedEmails.Updated"));

                return(continueEditing ? RedirectToAction("Edit", new { id = email.Id }) : RedirectToAction("List"));
            }

            //prepare model
            model = await _queuedEmailModelFactory.PrepareQueuedEmailModelAsync(model, email, true);

            //if we got this far, something failed, redisplay form
            return(View(model));
        }
Ejemplo n.º 2
0
        public async Task CanCRUD()
        {
            var queuedEmails = await _queuedEmailRepository.GetAllAsync(query => query);

            queuedEmails.Count.Should().Be(_emails.Count);

            var email = await _queuedEmailService.GetQueuedEmailByIdAsync(_emails[0].Id);

            email.Body = "test";

            await _queuedEmailService.UpdateQueuedEmailAsync(email);

            (await _queuedEmailRepository.GetByIdAsync(_emails[0].Id)).Body.Should().Be(email.Body);

            await _queuedEmailService.DeleteQueuedEmailAsync(email);

            queuedEmails = await _queuedEmailRepository.GetAllAsync(query => query);

            queuedEmails.Count.Should().Be(_emails.Count - 1);

            await _queuedEmailService.DeleteQueuedEmailsAsync(_emails.Take(3).ToList());

            queuedEmails = await _queuedEmailRepository.GetAllAsync(query => query);

            queuedEmails.Count.Should().Be(_emails.Count - 3);

            await _queuedEmailService.DeleteAllEmailsAsync();

            queuedEmails = await _queuedEmailRepository.GetAllAsync(query => query);

            queuedEmails.Count.Should().Be(0);
        }
        /// <summary>
        /// Executes a task
        /// </summary>
        public virtual async System.Threading.Tasks.Task ExecuteAsync()
        {
            var maxTries     = 3;
            var queuedEmails = await _queuedEmailService.SearchEmailsAsync(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
                {
                    await _emailSender.SendEmailAsync(await _emailAccountService.GetEmailAccountByIdAsync(queuedEmail.EmailAccountId),
                                                      queuedEmail.Subject,
                                                      queuedEmail.Body,
                                                      queuedEmail.From,
                                                      queuedEmail.FromName,
                                                      queuedEmail.To,
                                                      queuedEmail.ToName,
                                                      queuedEmail.ReplyTo,
                                                      queuedEmail.ReplyToName,
                                                      bcc,
                                                      cc,
                                                      queuedEmail.AttachmentFilePath,
                                                      queuedEmail.AttachmentFileName,
                                                      queuedEmail.AttachedDownloadId);

                    queuedEmail.SentOnUtc = DateTime.UtcNow;
                }
                catch (Exception exc)
                {
                    await _logger.ErrorAsync($"Error sending e-mail. {exc.Message}", exc);
                }
                finally
                {
                    queuedEmail.SentTries += 1;
                    await _queuedEmailService.UpdateQueuedEmailAsync(queuedEmail);
                }
            }
        }