/// <summary> /// Sends the email via the respective provider mentioned in provider settings and updates the history and quota tables. /// </summary> /// <param name="email"><see cref="Email"/> model</param> public void SendEmail(Email email) { _logger.LogInformation($"SendEmail method hit."); string sender = string.Empty; string message = email.GetMessage(_emailTemplateInteractor); _logger.LogInformation($"Message: {message}"); // If external application didnot send the sender value, get it from template. if (string.IsNullOrEmpty(email.Sender)) { sender = email.GetSender(_emailTemplateInteractor); } else { sender = email.Sender; } if (string.IsNullOrEmpty(sender)) { sender = _emailProviderConnectionString.Fields["Sender"]; } _logger.LogInformation($"Sender: {sender}"); string emailResponseStatus = _emailProvider.SendEmail(email.Recipients, message, email.Subject, sender).Result; _logger.LogDebug($"Email response status: {emailResponseStatus}"); foreach (var recipient in email.Recipients) { var emailObj = new EmailHistoryDto() { MessageSent = message, Sender = sender, Recipients = recipient, TemplateName = email.TemplateName, TemplateVariant = email.Variant, ChannelKey = email.ChannelKey, ProviderName = email.ProviderName, Tags = email.Tag, SentOn = DateTime.UtcNow, Status = emailResponseStatus, Attempts = 1, }; _emailHistoryInteractor.AddEmailHistory(emailObj); } //Update Quota Implemented Outside The Loop--revisit _emailQuotaInteractor.UpdateEmailQuota(email.ChannelKey); }
public EmailResponseDto <EmailHistoryDto> AddEmailHistory(EmailHistoryDto historyInput) { _logger.LogInformation("AddEmailHistory interactor method."); var response = new EmailResponseDto <EmailHistoryDto>(); try { if (!string.IsNullOrEmpty(historyInput.ProviderName)) { _logger.LogDebug($"Providername: {historyInput.ProviderName}"); if (string.IsNullOrEmpty(historyInput.EmailProviderID)) { historyInput.EmailProviderID = _emailProviderRepository.GetEmailProviderByName(historyInput.ProviderName)?.Result?.ID; _logger.LogDebug($"EmailProviderID: {historyInput.EmailProviderID}"); } else { var emailProvider = _emailProviderRepository.CheckIfEmailProviderIDNameValid(historyInput.EmailProviderID, historyInput.ProviderName); if (!emailProvider.Status) { response.Status = false; response.Message = "Email Provider ID and Provider Name do not match."; response.Result = historyInput; return(response); } } } else if (!string.IsNullOrEmpty(historyInput.EmailProviderID)) { var emailProvider = _emailProviderRepository.CheckIfEmailProviderIDIsValid(historyInput.EmailProviderID); if (!emailProvider.Status) { response.Status = false; response.Message = "Invalid Email Provider ID."; response.Result = historyInput; return(response); } } else { response.Status = false; response.Message = "Email Provider ID or Name cannot be blank."; response.Result = historyInput; _logger.LogError($"{response.Message}"); return(response); } if (!string.IsNullOrEmpty(historyInput.ChannelKey)) { _logger.LogDebug($"ChannelKey: {historyInput.ChannelKey}"); if (string.IsNullOrEmpty(historyInput.EmailChannelID)) { historyInput.EmailChannelID = _emailChannelRepository.GetEmailChannelByKey(historyInput.ChannelKey)?.Result?.ID; _logger.LogDebug($"EmailChannelID: {historyInput.EmailChannelID}"); } else { var emailChannel = _emailChannelRepository.CheckIfEmailChannelIDKeyValid(historyInput.EmailChannelID, historyInput.ChannelKey); if (!emailChannel.Status) { _logger.LogError($"{emailChannel.Message}"); response.Status = false; response.Message = emailChannel.Message; response.Result = historyInput; return(response); } } } else if (!string.IsNullOrEmpty(historyInput.EmailChannelID)) { var emailChannel = _emailChannelRepository.CheckIfEmailChannelIDIsValid(historyInput.EmailChannelID); if (!emailChannel.Status) { _logger.LogError($"{emailChannel.Message}"); response.Status = false; response.Message = emailChannel.Message; response.Result = historyInput; return(response); } } else { response.Status = false; response.Message = "Email Channel ID or Key cannot be blank."; response.Result = historyInput; _logger.LogError($"{response.Message}"); return(response); } var mappedEmailInput = _mapper.Map <EmailHistoryTable>(historyInput); var mappedResponse = _emailHistoryRepository.AddEmailHistory(mappedEmailInput); response = _mapper.Map <EmailResponseDto <EmailHistoryDto> >(mappedResponse); _logger.LogDebug($"Status: {response.Status}, Message: {response.Message}"); return(response); } catch (Exception ex) { _logger.LogError("Error occurred while adding email history:" + ex.Message); response.Message = "Error occurred while adding email history: " + ex.Message; response.Status = false; return(response); } }
private async Task <EmailBodyDto> GetEmailBodyDto(EmailTemplateName emailTemplateName, EmailHistoryDto emailHistoryDto) { if (!emailHistoryDto.OpportunityId.HasValue) { return(null); } EmailBodyDto emailBodyDto = null; switch (emailTemplateName) { case EmailTemplateName.EmployerFeedback: case EmailTemplateName.EmployerFeedbackV2: case EmailTemplateName.EmployerReferral: case EmailTemplateName.EmployerReferralComplex: case EmailTemplateName.EmployerReferralV3: case EmailTemplateName.EmployerReferralV4: case EmailTemplateName.EmployerReferralV5: emailBodyDto = await _opportunityRepository.GetEmailDeliveryStatusForEmployerAsync( emailHistoryDto.OpportunityId.Value, emailHistoryDto.SentTo); break; case EmailTemplateName.ProviderFeedback: case EmailTemplateName.ProviderFeedbackV2: case EmailTemplateName.ProviderQuarterlyUpdate: case EmailTemplateName.ProviderReferral: case EmailTemplateName.ProviderReferralComplex: case EmailTemplateName.ProviderReferralV3: case EmailTemplateName.ProviderReferralV4: case EmailTemplateName.ProviderReferralV5: emailBodyDto = await _opportunityRepository.GetEmailDeliveryStatusForProviderAsync( emailHistoryDto.OpportunityId.Value, emailHistoryDto.SentTo); break; } return(emailBodyDto); }
private async Task <string> GetEmailBody(EmailTemplateName emailTemplateName, EmailHistoryDto emailHistoryDto) { var emailBody = string.Empty; var emailBodyDto = await GetEmailBodyDto(emailTemplateName, emailHistoryDto); if (emailBodyDto != null) { emailBody = GetEmailBodyFrom(emailBodyDto); } return(emailBody); }