示例#1
0
        /// <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);
            }
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }