Exemplo n.º 1
0
        public async Task SendEmailAsync(ApplicationEmailRequest emailRequest)
        {
            var apiKey = ApplicationOptions.CurrentValue.SendGridApiKey;

            if (!string.IsNullOrEmpty(apiKey))
            {
                var sg = new SendGridClient(apiKey);

                var from    = new EmailAddress(emailRequest.SenderEmail, emailRequest.SenderEmailName);
                var subject = emailRequest.Subject;
                var to      = new EmailAddress(emailRequest.RecipientEmail, emailRequest.RecipientEmailName);
                var mail    = MailHelper.CreateSingleEmail(from, to, subject, emailRequest.BodyText, emailRequest.BodyHtml);

                _ = await sg.SendEmailAsync(mail);
            }
            else
            {
                Logger.LogInformation($"From = {emailRequest.SenderEmailName}({emailRequest.SenderEmailName})");
                Logger.LogInformation($"To = {emailRequest.RecipientEmail}({emailRequest.RecipientEmailName})");
                Logger.LogInformation($"Subject = {emailRequest.Subject}");
                Logger.LogInformation($"Text = {emailRequest.BodyText}");
                Logger.LogInformation($"Html = {emailRequest.BodyHtml}");
            }
        }
        private async Task TransmitPendingEmailAsync(long emailRequestId)
        {
            using var ctx = QuiltContextFactory.Create();

            var dbEmailRequest = await ctx.EmailRequests.Where(r => r.EmailRequestId == emailRequestId).SingleAsync().ConfigureAwait(false);

            if (dbEmailRequest.EmailRequestStatusCode != EmailRequestStatusCodes.Posted)
            {
                throw new BusinessOperationException(string.Format("Invalid email request status (ID = {0}, Status = {1}).", emailRequestId, dbEmailRequest.EmailRequestStatusCode));
            }

            var bodyType = dbEmailRequest.BodyTypeCode;
            var bodyText = dbEmailRequest.BodyText;
            var bodyHtml = dbEmailRequest.BodyHtml;

            switch (bodyType)
            {
            case EmailBodyTypes.Alert:
            {
                var dbAlertEmailRequest = dbEmailRequest.AlertEmailRequests.FirstOrDefault();
                if (dbAlertEmailRequest != null)
                {
                    bodyText = bodyText.Replace(TemplateVariables.DeferredAlertId, dbAlertEmailRequest.AlertId.ToString());
                    bodyHtml = bodyHtml.Replace(TemplateVariables.DeferredAlertId, dbAlertEmailRequest.AlertId.ToString());
                }
            }
            break;

            case EmailBodyTypes.Message:
            {
                var dbMessageEmailRequest = dbEmailRequest.MessageEmailRequests.FirstOrDefault();
                if (dbMessageEmailRequest != null)
                {
                    bodyText = bodyText.Replace(TemplateVariables.DeferredMessageId, dbMessageEmailRequest.MessageId.ToString());
                    bodyHtml = bodyHtml.Replace(TemplateVariables.DeferredMessageId, dbMessageEmailRequest.MessageId.ToString());
                }
            }
            break;

            case EmailBodyTypes.Notification:
            {
                var dbNotificationEmailRequest = dbEmailRequest.NotificationEmailRequests.FirstOrDefault();
                if (dbNotificationEmailRequest != null)
                {
                    bodyText = bodyText.Replace(TemplateVariables.DeferredNotificationId, dbNotificationEmailRequest.NotificationId.ToString());
                    bodyHtml = bodyHtml.Replace(TemplateVariables.DeferredNotificationId, dbNotificationEmailRequest.NotificationId.ToString());
                }
            }
            break;
            }

            var emailRequest = new ApplicationEmailRequest()
            {
                SenderEmail        = dbEmailRequest.SenderEmail,
                SenderEmailName    = dbEmailRequest.SenderEmailName,
                RecipientEmail     = dbEmailRequest.RecipientEmail,
                RecipientEmailName = dbEmailRequest.RecipientEmailName,
                Subject            = dbEmailRequest.Subject,
                BodyText           = bodyText,
                BodyHtml           = bodyHtml
            };

            await ApplicationEmailSender.SendEmailAsync(emailRequest);

            // Update the email request status.
            //
            dbEmailRequest.EmailRequestStatusCode        = EmailRequestStatusCodes.Complete;
            dbEmailRequest.EmailRequestStatusDateTimeUtc = GetUtcNow();

            _ = await ctx.SaveChangesAsync().ConfigureAwait(false);
        }