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])); }
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); }
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); }
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); }
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()}\"."); }
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)); }