示例#1
0
        protected override async Task ExecuteAsync(CancellationToken cancellationToken)
        {
            _mailConfigDto = await _mailConfig.GetConfig(_mailName);

            _logger.LogDebug($"Starting {_mailConfigDto.Name} mail process...");
            cancellationToken.Register(() => _logger.LogDebug($"{_mailConfigDto.Name} mail background service is stopping."));

            while (!cancellationToken.IsCancellationRequested)
            {
                if (BackgroundTask.ShouldStart(_mailConfigDto.NextSend))
                {
                    try
                    {
                        _mailConfigDto = await _mailConfig.GetConfig(_mailName);

                        _logger.LogInformation($"Preparing {_mailConfigDto.Name} mail.");
                        List <EmailMessage> emailMessages = await PrepareMail();

                        await _messageQueue.SendMessagesAsync <EmailMessage>(emailMessages);

                        await _mailConfig.UpdateConfigNextSend(_mailName);
                    }
                    catch (Exception ex)
                    {
                        _logger.LogError(ex, "ProjectRecommendations ecountered an error");
                    }
                }

                await Task.Delay(1000, cancellationToken);
            }

            _logger.LogDebug($"{_mailConfigDto.Name} mail background service is stopping.");
        }
        public async Task <EmailMessage> PrepareFeedbackMail(NotificationDto notification)
        {
            string        feedbackContent = notification.Content;
            EmailMessage  emailMessage    = new EmailMessage();
            string        mailName        = "FeedbackMessage";
            MailConfigDto mailConfigDto   = await _mailConfig.GetConfig(mailName);

            SendGridTemplateDto template = await _sendGridService.GetMailTemplate(mailConfigDto.TemplateId);

            DTOs.Version activeTemplate = template.Versions.FirstOrDefault(v => v.Active == 1);
            emailMessage = JsonConvert.DeserializeObject <EmailMessage>(AppSettings.FeedbackRecipients);

            EmailAddress fromAddress = _fromAddress;

            emailMessage.FromAddresses.Add(fromAddress);
            emailMessage.Subject = $"{activeTemplate.Subject} {_testEmailIndicator}";
            string htmlContent      = activeTemplate.HtmlContent.Replace("{{feedbackMessage}}", feedbackContent);
            string plainTextContent = activeTemplate.PlainContent.Replace("{{feedbackMessage}}", feedbackContent);

            emailMessage.MailContent.Add("text/html", htmlContent);
            emailMessage.MailContent.Add("text/plain", plainTextContent);

            return(emailMessage);
        }