public Task SendEmailAsync(Models.Mail.MailMessage message) { var client = new SmtpClient(_globalSettings.Mail.Smtp.Host, _globalSettings.Mail.Smtp.Port); client.EnableSsl = _globalSettings.Mail.Smtp.Ssl; client.UseDefaultCredentials = _globalSettings.Mail.Smtp.UseDefaultCredentials; client.DeliveryMethod = SmtpDeliveryMethod.Network; if (!string.IsNullOrWhiteSpace(_globalSettings.Mail.Smtp.Username) && !string.IsNullOrWhiteSpace(_globalSettings.Mail.Smtp.Password)) { client.Credentials = new NetworkCredential(_globalSettings.Mail.Smtp.Username, _globalSettings.Mail.Smtp.Password); } var smtpMessage = new MailMessage(); smtpMessage.From = new MailAddress(_globalSettings.Mail.ReplyToEmail, _globalSettings.SiteName); smtpMessage.Subject = message.Subject; smtpMessage.SubjectEncoding = Encoding.UTF8; smtpMessage.BodyEncoding = Encoding.UTF8; smtpMessage.BodyTransferEncoding = System.Net.Mime.TransferEncoding.QuotedPrintable; foreach (var address in message.ToEmails) { smtpMessage.To.Add(new MailAddress(address)); } if (string.IsNullOrWhiteSpace(message.TextContent)) { smtpMessage.IsBodyHtml = true; smtpMessage.Body = message.HtmlContent; } else { smtpMessage.Body = message.TextContent; var htmlView = AlternateView.CreateAlternateViewFromString(message.HtmlContent); htmlView.ContentType = new System.Net.Mime.ContentType("text/html"); smtpMessage.AlternateViews.Add(htmlView); } client.SendCompleted += (sender, e) => { if (e.Error != null) { _logger.LogError(e.Error, "Mail send failed."); } if (e.Cancelled) { _logger.LogWarning("Mail send canceled."); } smtpMessage.Dispose(); client.Dispose(); }; client.SendAsync(smtpMessage, null); return(Task.FromResult(0)); }
public async Task SendEmailAsync(Models.Mail.MailMessage message) { var httpClient = _clientFactory.CreateClient("PostalMailDeliveryService"); httpClient.DefaultRequestHeaders.Add("X-Server-API-Key", _globalSettings.Mail.PostalApiKey); var request = new PostalRequest { subject = message.Subject, from = _from, reply_to = _reply, html_body = message.HtmlContent, to = new List <string>(), tag = _baseTag }; foreach (var address in message.ToEmails) { request.to.Add(CoreHelpers.PunyEncode(address)); } if (message.BccEmails != null) { request.bcc = new List <string>(); foreach (var address in message.BccEmails) { request.bcc.Add(CoreHelpers.PunyEncode(address)); } } if (!string.IsNullOrWhiteSpace(message.TextContent)) { request.plain_body = message.TextContent; } if (!string.IsNullOrWhiteSpace(message.Category)) { request.tag = string.Concat(request.tag, "-Cat_", message.Category); } var responseMessage = await httpClient.PostAsJsonAsync( $"https://{_globalSettings.Mail.PostalDomain}/api/v1/send/message", request); if (responseMessage.IsSuccessStatusCode) { var response = await responseMessage.Content.ReadFromJsonAsync <PostalResponse>(); if (response.status != "success") { _logger.LogError("Postal send status was not successful: {0}, {1}", response.status, response.message); } } else { _logger.LogError("Postal send failed: {0}", responseMessage.StatusCode); } }
public async Task SendEmailAsync(Models.Mail.MailMessage message) { var mimeMessage = new MimeMessage(); mimeMessage.From.Add(new MailboxAddress(_globalSettings.SiteName, _globalSettings.Mail.ReplyToEmail)); mimeMessage.Subject = message.Subject; if (!string.IsNullOrWhiteSpace(_replyDomain)) { mimeMessage.MessageId = $"<{Guid.NewGuid()}@{_replyDomain}>"; } foreach (var address in message.ToEmails) { mimeMessage.To.Add(new MailboxAddress(address)); } if (message.BccEmails != null) { foreach (var address in message.BccEmails) { mimeMessage.Bcc.Add(new MailboxAddress(address)); } } var builder = new BodyBuilder(); if (!string.IsNullOrWhiteSpace(message.TextContent)) { builder.TextBody = message.TextContent; } builder.HtmlBody = message.HtmlContent; mimeMessage.Body = builder.ToMessageBody(); using (var client = new SmtpClient()) { if (_globalSettings.Mail.Smtp.TrustServer) { client.ServerCertificateValidationCallback = (s, c, h, e) => true; } var useSsl = _globalSettings.Mail.Smtp.Port == 587 && !_globalSettings.Mail.Smtp.SslOverride ? false : _globalSettings.Mail.Smtp.Ssl; await client.ConnectAsync(_globalSettings.Mail.Smtp.Host, _globalSettings.Mail.Smtp.Port, useSsl); if (!string.IsNullOrWhiteSpace(_globalSettings.Mail.Smtp.Username) && !string.IsNullOrWhiteSpace(_globalSettings.Mail.Smtp.Password)) { await client.AuthenticateAsync(_globalSettings.Mail.Smtp.Username, _globalSettings.Mail.Smtp.Password); } await client.SendAsync(mimeMessage); await client.DisconnectAsync(true); } }