Beispiel #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> PrepareWelcomeMail(NotificationDto notification)
        {
            string        notificantEmail = (await _userStorage.FindAsync(u => u.Id == notification.NotificantId)).Email;
            EmailMessage  emailMessage    = new EmailMessage();
            string        mailName        = "WelcomeMessage";
            MailConfigDto mailConfigDto   = await _mailConfig.GetConfig(mailName);

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

            DTOs.Version activeTemplate = template.Versions.FirstOrDefault(v => v.Active == 1);

            EmailAddress fromAddress = _fromAddress;
            EmailAddress toAddress   = new EmailAddress("", notificantEmail);

            emailMessage.FromAddresses.Add(fromAddress);
            emailMessage.ToAddresses.Add(toAddress);
            emailMessage.Subject = $"{activeTemplate.Subject} {_testEmailIndicator}";
            string htmlContent      = activeTemplate.HtmlContent.Replace("{{currentYear}}", DateTime.Now.Year.ToString());
            string plainTextContent = activeTemplate.PlainContent.Replace("{{currentYear}}", DateTime.Now.Year.ToString());

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

            return(emailMessage);
        }
        public async Task <EmailMessage> PrepareInvalidWorkspaceInviteMail(NotificationDto notification)
        {
            string        notificantEmail = (await _userStorage.FindAsync(u => u.Id == notification.NotificantId)).Email;
            EmailMessage  emailMessage    = new EmailMessage();
            string        mailName        = "InvalidWorkspaceInviteMessage";
            MailConfigDto mailConfigDto   = await _mailConfig.GetConfig(mailName);

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

            DTOs.Version activeTemplate = template.Versions.FirstOrDefault(v => v.Active == 1);

            EmailAddress fromAddress = _fromAddress;
            EmailAddress toAddress   = new EmailAddress("", notificantEmail);

            emailMessage.FromAddresses.Add(fromAddress);
            emailMessage.ToAddresses.Add(toAddress);
            emailMessage.Subject = $"{activeTemplate.Subject} {_testEmailIndicator}";

            ProjectDto project     = notification.NotificationObject as ProjectDto;
            string     htmlContent = activeTemplate.HtmlContent
                                     .Replace("{{projectName}}", project.Name)
                                     .Replace("{{workspaceName}}", project.CommunicationPlatform);
            string plainTextContent = activeTemplate.PlainContent
                                      .Replace("{{projectName}}", project.Name)
                                      .Replace("{{workspaceName}}", project.CommunicationPlatform);

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


            return(emailMessage);
        }
        public async Task <EmailMessage> PrepareInitialFeedbackRequestMail(NotificationDto notification)
        {
            UserEntity user = await _userStorage.FindAsync(u => u.Id == notification.NotificantId);

            string notificantEmail = user.Email;

            EmailMessage  emailMessage  = new EmailMessage();
            string        mailName      = "InitialFeedbackRequestMessage";
            MailConfigDto mailConfigDto = await _mailConfig.GetConfig(mailName);

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

            DTOs.Version activeTemplate = template.Versions.FirstOrDefault(v => v.Active == 1);

            EmailAddress fromAddress = _fromAddress;
            EmailAddress toAddress   = new EmailAddress("", notificantEmail);

            emailMessage.FromAddresses.Add(fromAddress);
            emailMessage.ToAddresses.Add(toAddress);
            emailMessage.Subject = $"{activeTemplate.Subject} {_testEmailIndicator}";

            string htmlContent      = activeTemplate.HtmlContent;
            string plainTextContent = activeTemplate.PlainContent;

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

            return(emailMessage);
        }
Beispiel #5
0
        public JsonResult Create(MailConfigDto model)
        {
            string errs = GetModelStateError();

            if (!string.IsNullOrEmpty(errs))
            {
                return(Json(new OperateMessage <string>(OperateResult.Fail, true, errs)));
            }
            bool IsSucceed = _MailConfigAppService.Create(new MailConfigDto()
            {
                ID               = Guid.NewGuid(),
                AccountName      = model.AccountName,
                AccountPwd       = model.AccountPwd,
                CallEnumKey      = model.CallEnumKey,
                Content          = model.Content,
                CreateTime       = DateTime.Now,
                CreatorID        = _currUser.ID,
                IsDefault        = model.IsDefault,
                LastUpdateTime   = DateTime.Now,
                LastUpdateUserID = _currUser.ID,
                MailFrom         = model.MailFrom,
                MailTo           = model.MailTo,
                NickName         = model.NickName,
                Port             = model.Port,
                Stmp             = model.Stmp,
            });

            if (IsSucceed)
            {
                return(Json(new OperateMessage <string>("/MailConfig/Index")));
            }
            return(Json(new OperateMessage <string>(IsSucceed ? OperateResult.Success : OperateResult.Fail, true, IsSucceed ? "添加成功!" : "添加失败!")));
        }
Beispiel #6
0
        public JsonResult Edit(MailConfigDto model)
        {
            string errs = GetModelStateError();

            if (!string.IsNullOrEmpty(errs))
            {
                return(Json(new OperateMessage <string>(OperateResult.Fail, true, errs)));
            }
            MailConfigDto currModel = _MailConfigAppService.Get(model.ID);

            if (currModel == null)
            {
                return(Json(new OperateMessage <string>(OperateResult.Fail, true, "修改失败,修改的内容不存在!")));
            }
            currModel.AccountName      = model.AccountName;
            currModel.AccountPwd       = model.AccountPwd;
            currModel.CallEnumKey      = model.CallEnumKey;
            currModel.Content          = model.Content;
            currModel.IsDefault        = model.IsDefault;
            currModel.LastUpdateTime   = DateTime.Now;
            currModel.LastUpdateUserID = _currUser.ID;
            currModel.MailFrom         = model.MailFrom;
            currModel.MailTo           = model.MailTo;
            currModel.NickName         = model.NickName;
            currModel.Port             = model.Port;
            currModel.Stmp             = model.Stmp;

            bool IsSucceed = _MailConfigAppService.Edit(currModel);

            if (IsSucceed)
            {
                return(Json(new OperateMessage <string>("/MailConfig/Index")));
            }
            return(Json(new OperateMessage <string>(IsSucceed ? OperateResult.Success : OperateResult.Fail, true, IsSucceed ? "修改成功!" : "修改失败!")));
        }
        public async Task <MailConfigDto> InsertOrUpdateConfig(MailConfigDto mailConfigDto)
        {
            MailConfigEntity mailConfigEntity = MapToMailEntity(mailConfigDto);
            TableOperation   operation        = TableOperation.InsertOrMerge(mailConfigEntity);
            TableResult      result           = await _mailConfigTable.ExecuteAsync(operation);

            MailConfigDto mailConfig = MapToMailConfigDto(result.Result as MailConfigEntity);

            return(mailConfig);
        }
Beispiel #8
0
        // Summary:
        //     UpdateConfigNextSend increments the NextSend property
        //     by IntervalSeconds and persists the new mail config to
        //     storage.
        // Parameters:
        //   mailName:
        //     The identifier to use when loading the mail configuration.
        //
        public async Task UpdateConfigNextSend(string mailName)
        {
            MailConfigDto mailConfigDto = Config[mailName];

            mailConfigDto.LastSend = DateTimeOffset.UtcNow;
            mailConfigDto.NextSend = DateTimeOffset.UtcNow.AddSeconds(mailConfigDto.IntervalSeconds);
            mailConfigDto          = await _mailConfigStorage.InsertOrUpdateConfig(mailConfigDto);

            Config[mailName] = mailConfigDto;
            return;
        }
        private MailConfigEntity MapToMailEntity(MailConfigDto mailConfig)
        {
            MailConfigEntity mailConfigEntity = new MailConfigEntity(mailConfig.Name);

            mailConfigEntity.Name            = mailConfig.Name;
            mailConfigEntity.Type            = mailConfig.Type;
            mailConfigEntity.TemplateId      = mailConfig.TemplateId;
            mailConfigEntity.IntervalSeconds = mailConfig.IntervalSeconds;
            mailConfigEntity.LastSend        = mailConfig.LastSend;
            mailConfigEntity.NextSend        = mailConfig.NextSend;
            return(mailConfigEntity);
        }
Beispiel #10
0
 /// <summary>
 /// edit
 /// </summary>
 /// <param name="dto"></param>
 /// <returns></returns>
 public bool Edit(MailConfigDto dto)
 {
     try
     {
         var entity = _repository.InsertOrUpdate(Mapper.Map <MailConfig>(dto));
         return(entity == null ? false : true);
     }
     catch (Exception ex)
     {
         _log.LogError("MailConfigAppService Edit error occured:" + ex.Message);
         return(false);
     }
 }
        public async Task <MailConfigDto> LoadConfig(string mailName)
        {
            TableOperation operation = TableOperation.Retrieve <MailConfigEntity>(_mailConfigPartitionKey, mailName);
            TableResult    result    = await _mailConfigTable.ExecuteAsync(operation);

            MailConfigEntity mailConfig = result.Result as MailConfigEntity;

            if (mailConfig != null)
            {
                MailConfigDto mailConfigDto = MapToMailConfigDto(mailConfig);
                return(mailConfigDto);
            }
            else
            {
                return(null);
            }
        }
Beispiel #12
0
        // Summary:
        //     GetConfig loads mail configuration from storage
        //     if found, otherwise we write it to storage and
        //     store it in memory.
        // Parameters:
        //   mailName:
        //     The identifier to use when loading the mail configuration.
        //
        public async Task <MailConfigDto> GetConfig(string mailName)
        {
            MailConfigDto mailConfigDto = await _mailConfigStorage.LoadConfig(mailName);

            if (mailConfigDto == null)
            {
                MailConfigDto cachedMailConfigDto = Config[mailName];
                cachedMailConfigDto.LastSend = cachedMailConfigDto.LastSend;
                cachedMailConfigDto.NextSend = cachedMailConfigDto.NextSend;
                mailConfigDto = await _mailConfigStorage.InsertOrUpdateConfig(cachedMailConfigDto);

                Config[mailName] = mailConfigDto;
            }
            else
            {
                Config[mailName] = mailConfigDto;
            }
            return(Config[mailName]);
        }
        public async Task <EmailMessage> PrepareProjectPostedMail(NotificationDto notification, ProjectDto project)
        {
            UserEntity user = await _userStorage.FindAsync(u => u.Id == notification.NotificantId);

            string notificantEmail = user.Email;

            EmailMessage  emailMessage  = new EmailMessage();
            string        mailName      = "ProjectPostedMessage";
            MailConfigDto mailConfigDto = await _mailConfig.GetConfig(mailName);

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

            DTOs.Version activeTemplate = template.Versions.FirstOrDefault(v => v.Active == 1);

            // Get workspace install url
            string workspaceType = project.CommunicationPlatform;
            string installUrl    = await _workspaceAppService.GetInstallUrl(workspaceType);

            EmailAddress fromAddress = _fromAddress;
            EmailAddress toAddress   = new EmailAddress("", notificantEmail);

            emailMessage.FromAddresses.Add(fromAddress);
            emailMessage.ToAddresses.Add(toAddress);
            emailMessage.Subject = $"{activeTemplate.Subject} {_testEmailIndicator}";

            string htmlContent = activeTemplate.HtmlContent
                                 .Replace("{{workspaceType}}", workspaceType)
                                 .Replace("{{workspaceAppInstallUrl}}", installUrl);
            string plainTextContent = activeTemplate.PlainContent
                                      .Replace("{{workspaceType}}", workspaceType)
                                      .Replace("{{workspaceAppInstallUrl}}", installUrl);

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

            return(emailMessage);
        }
        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);
        }
        private MailConfigDto MapToMailConfigDto(MailConfigEntity mailConfig)
        {
            MailConfigDto mailConfigDto = new MailConfigDto(mailConfig.Name, mailConfig.Type, mailConfig.TemplateId, mailConfig.IntervalSeconds, mailConfig.LastSend.Value, mailConfig.NextSend.Value);

            return(mailConfigDto);
        }
Beispiel #16
0
        public IActionResult Edit(Guid ID)
        {
            MailConfigDto currModel = _MailConfigAppService.Get(ID);

            return(View(currModel));
        }