public async Task SendFailureEmailBack( string target, string nick, string channelName, string summary, string reason, DateTimeOffset sendTime) { var timeRepr = sendTime.ToUniversalTime().ToString(); var email = new FluentEmail.Core.Email($"{channelName}@{send.Domain}") .To(target, nick) // .ReplyTo(target) .Subject($"Failed to deliver your message to {channelName}") .Body($"<html><p>Your message sending to channel {channelName} at {timeRepr} was not delivered successfully.</p><p>Reason: {reason}.</p><p>Body of the failed message:</p><blockquote><pre>{summary}</pre></blockquote></html>", true) .PlaintextAlternativeBody($"Your message sending to channel {channelName} at {timeRepr} was not delivered successfully.\r\n\r\nReason: {reason}.\r\n\r\nBody of the failing message:\r\n{summary}") ; var resp = await this.send.SendEmail(email); if (!resp.Successful) { var sb = new StringBuilder(); sb.AppendFormat("Failed to deliver failure message of channel {0} to {1}.", channelName, target); sb.AppendLine(); sb.AppendLine("Messages:"); foreach (var i in resp.ErrorMessages) { sb.AppendFormat(" - {0}", i); } logger.LogWarning(sb.ToString()); } else { logger.LogInformation($"Channel '{channelName}' not found message to {target} successfully sent"); } }
} //set only via Secret Manager public Task SendEmailAsync(string toEmailAddress, string subject, string message) { // TODO: Localize? var email = Mail.From("*****@*****.**", "Citizens' Exchange") .To(toEmailAddress) .Subject(subject) .Body(message); email.Sender = new MailgunSender(Options.MailgunDomain, Options.MailgunApiKey); var response = email.SendAsync(); return(response); }
public async Task SendEmailAsync(string email, string subject, string htmlMessage) { try { var msg = new SendGridMessage() { From = new EmailAddress("*****@*****.**", "StopWatcher Customer Service"), Subject = subject, PlainTextContent = htmlMessage, HtmlContent = htmlMessage }; msg.AddTo(new EmailAddress(email)); msg.SetClickTracking(false, false); Response response = await _sendGridClient.SendEmailAsync(msg); if (response.StatusCode != System.Net.HttpStatusCode.Accepted) { throw new ApplicationException("SendGrid error: " + await response.Body.ReadAsStringAsync()); } } catch (Exception ex) { _logger.LogError(ex, ex.Message); try { FluentEmail.Core.Email mgEmail = new FluentEmail.Core.Email("*****@*****.**", "StopWatcher Customer Service"); mgEmail .To(email) .Subject(subject) .Body(htmlMessage); var r2 = await _mailgunSender.SendAsync(mgEmail); if (!r2.Successful) { throw new ApplicationException("MailGun error: " + string.Join(",", r2.ErrorMessages)); } } catch (Exception ex2) { _logger.LogError(ex2, ex2.Message); } } }
public async Task SendEmail(MailModel mailModel) { try { var email = new FluentEmail.Core.Email(mailModel.From) .To(mailModel.To) .Subject(mailModel.Subject); email.Renderer = new RazorRenderer(); if (mailModel.TemplateFile != null) { email.UsingTemplateFromFile <ViewModel>(mailModel.TemplateFile, mailModel.ViewModel); } else { email.UsingTemplate <ViewModel>(mailModel.Template, mailModel.ViewModel); } await _smtpSender.SendAsync(email); } catch (SmtpFailedRecipientException ex) { _logger.LogError("SmtpMailSender.SendEmail", "SmtpFailedRecipientException occurred while sending mail", new { MailModel = mailModel, SmtpSettings = _smtpSettings, Exception = ex }); } catch (Exception ex) { _logger.LogError("SmtpMailSender.SendEmail", "Exception occurred while sending mail", new { MailModel = mailModel, SmtpSettings = _smtpSettings, Exception = ex }); throw; } }