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); }
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 ? "添加成功!" : "添加失败!"))); }
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); }
// 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); }
/// <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); } }
// 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); }
public IActionResult Edit(Guid ID) { MailConfigDto currModel = _MailConfigAppService.Get(ID); return(View(currModel)); }