예제 #1
0
        public async Task LogQuotaExceedEmailToDisk(EmailTypes emailType, string emailTo, string subject, string body, int userId)
        {
            string solutionFolder          = Directory.GetParent(_appPath).Parent?.FullName;
            string logsFolder              = $@"{solutionFolder}\Logs";
            string rejectedEmailLogsFolder = $@"{logsFolder}\EmailsOutRejected";

            Directory.CreateDirectory(rejectedEmailLogsFolder);

            string emailDate = DateTime.Now.ToString("yyyy-MM-ddTHH-mm-ss");
            string fileName  = $"{emailType}-{userId}-{emailDate}.json";
            string filePath  = $@"{rejectedEmailLogsFolder}\{fileName}";
            string fileText  = JsonConvert.SerializeObject(new { Type    = emailType.ToString(),
                                                                 To      = emailTo,
                                                                 Subject = subject,
                                                                 Text    = body }, Formatting.Indented);

            await Task.Run(() =>
            {
                if (File.Exists(filePath))
                {
                    filePath = filePath.Replace(".json", $"-({DateTime.Now.Ticks}).json");
                }
                File.WriteAllText(filePath, fileText);
            });
        }
        public static EmailTemplateNameModel TemplateNames(EmailTypes type)
        {
            if (!PathLib.ContainsKey(type))
            {
                throw new ArgumentOutOfRangeException($"Can not find type {type.ToString()} in Template names collection");
            }

            return(new EmailTemplateNameModel(PathLib[type]));
        }
예제 #3
0
        private async Task SendQuotaExceedNotification(QuotaValidationResult quotaExceededResult, EmailTypes emailType, SendGridMessage message, int userId)
        {
            //Andriy: Send email notification only if quota exceeded first time.
            if (quotaExceededResult.ExceedData.Value == quotaExceededResult.ExceedData.Quota + 1)
            {
                var notificationMessage = new SendGridMessage
                {
                    From    = new MailAddress(HellolingoEmailAddresses.Default, "HL"),
                    To      = new[] { new MailAddress(HellolingoEmailAddresses.Admin) },
                    Subject = $"{emailType} quota exceeded",
                };

                string template         = @"
				<style>
				  body { font: 12px arial; }
				  table { border-collapse: collapse; font-size: 13px;}
				  td { border: solid lightgrey 1px; padding: 2px 5px; }
				  td:nth-child(2) { font-weight: bold }
				  .everyone { font-weight:bold; color: green }
				  .ephemeral { font-weight:bold; color: orange }
				  .sender { font-weight:bold; color: red }
				  .button { 
					padding: 8px; border-radius: 8px;
					color: black; text-decoration: none;
					line-height: 36px;
				  }
				  .button-green { background-color: green; border: solid 3px green }
				  .button-red { background-color: red; border: solid 3px red }
				</style>

				<h3>Emails quota exceeded</h3>
				<table>
				  <tr><td>When</td><td>#When#</td></tr>
				  <tr><td>Email type</td><td>#EmailType#</td></tr>
                  <tr><td>Quota type</td><td>#QuotaType#</td></tr>
                  <tr><td>Quota value</td><td>#QuotaValue#</td></tr>
                  <tr><td>Email address</td><td>#EmailAddress#</td></tr>
                  <tr><td>Email subject</td><td>#EmailSubject#</td></tr>
				</table>
                <h4>Email body</h4>
                <div>#EmailBody#</div>";
                string notificationHtml = template.Replace("#When#", DateTime.Now.ToString(DateTimeFormat))
                                          .Replace("#EmailType#", emailType.ToString())
                                          .Replace("#QuotaType#", quotaExceededResult.ExceedData.QuotaType.ToString())
                                          .Replace("#QuotaValue#", quotaExceededResult.ExceedData.Quota.ToString())
                                          .Replace("#EmailAddress#", message.To.First().Address)
                                          .Replace("#EmailSubject#", message.Subject)
                                          .Replace("#EmailBody#", message.Html ?? message.Text);


                notificationMessage.Html = notificationHtml;
                await _sgTransport.DeliverAsync(notificationMessage);
            }
            await _sgLogger.LogQuotaExceedEmailToDisk(emailType, message.To.FirstOrDefault()?.Address, message.Subject, message.Html ?? message.Text, userId);
        }
예제 #4
0
        public void Test_GetEmailContent_HasExpectedOutput(EmailTypes emailType)
        {
            // given
            var subject = new EmailContentCreator();

            // when
            string testString = subject.GetEmailContent(emailType);

            // then
            Assert.AreEqual($"SUBJECT: {emailType.ToString()} | CONTENT: This is email of type: \"{emailType.ToString()}\".", testString);
        }
예제 #5
0
        private string PrepeareEmail(EmailTypes emailTypeToSend, string templateHtml, string speakerName, string sessionTitle)
        {
            string speakerFirstName = speakerName.Split(' ').First();
            string html             = templateHtml.Replace(configuration.Email_SpeakerNamePlaceholder, speakerFirstName)
                                      .Replace(configuration.Email_SessionTitlePlaceholder, sessionTitle);

            var directory = Path.Combine(configuration.SentEmails_OutputDirectory, emailTypeToSend.ToString());

            Directory.CreateDirectory(directory);

            string path = Path.Combine(directory, speakerName) + ".html";

            File.WriteAllText(path, html);

            return(html);
        }
예제 #6
0
        public async Task SendEmail(EmailTypes emailtype, TransmissionPayload payload)
        {
            var template = await GetTemplate(emailtype.ToString());

            var transmission = new Transmission
            {
                Recipients = payload.Destinations.Select(x => new Recipient
                {
                    Address          = new Address(x.DestinationEmail),
                    SubstitutionData = x.SubstitutionData
                }).ToList(),
                Content =
                {
                    Html        = template.Body,
                    From        = new Address(template.SourceEmail),
                    Subject     = template.Subject,
                    Attachments = payload.Attachments.ToList()
                }
            };
            var client = new Client(_clientKey);
            await client.Transmissions.Send(transmission);
        }
 public string GetEmailContent(EmailTypes emailType)
 {
     return($"SUBJECT: {emailType.ToString()} | CONTENT: This is email of type: \"{emailType.ToString()}\".");
 }
예제 #8
0
        public virtual ActionResult ComposeEmailFromTemplate(string orderNumber,
                                                             EmailTypes type,
                                                             long?replyToId)
        {
            LogI("ComposeEmailFromTemplate, orderNumber=" + orderNumber + ", type=" + type.ToString() + ", replyToEmailId=" + replyToId);

            var company      = AccessManager.Company;
            var smtpSettings = CompanyHelper.GetSmtpSettings(company);
            var byName       = AccessManager.UserName;

            var result = ComposeEmailViewModel.GetTemplateInfo(Db,
                                                               EmailService,
                                                               company,
                                                               byName,
                                                               type,
                                                               smtpSettings,
                                                               orderNumber,
                                                               replyToId);

            return(View("ComposeEmail", result.Data));
        }