diff --git a/src/Ombi.Notifications/GenericEmailProvider.cs b/src/Ombi.Notifications/GenericEmailProvider.cs index 04928d1dc..d3f207234 100644 --- a/src/Ombi.Notifications/GenericEmailProvider.cs +++ b/src/Ombi.Notifications/GenericEmailProvider.cs @@ -97,8 +97,6 @@ namespace Ombi.Notifications public async Task Send(NotificationMessage model, EmailNotificationSettings settings) { - try - { EnsureArg.IsNotNullOrEmpty(settings.SenderAddress); EnsureArg.IsNotNullOrEmpty(model.To); EnsureArg.IsNotNullOrEmpty(model.Message); @@ -120,9 +118,18 @@ namespace Ombi.Notifications Subject = model.Subject }; - message.From.Add(new MailboxAddress(string.IsNullOrEmpty(settings.SenderName) ? settings.SenderAddress : settings.SenderName, settings.SenderAddress)); message.To.Add(new MailboxAddress(model.To, model.To)); + await Send(message, settings); + + } + + public async Task Send(MimeMessage message, EmailNotificationSettings settings) + { + try + { + message.From.Add(new MailboxAddress(string.IsNullOrEmpty(settings.SenderName) ? settings.SenderAddress : settings.SenderName, settings.SenderAddress)); + using (var client = new SmtpClient()) { if (settings.DisableCertificateChecking) diff --git a/src/Ombi.Notifications/IEmailProvider.cs b/src/Ombi.Notifications/IEmailProvider.cs index 85bb91331..009e9bf96 100644 --- a/src/Ombi.Notifications/IEmailProvider.cs +++ b/src/Ombi.Notifications/IEmailProvider.cs @@ -1,4 +1,5 @@ using System.Threading.Tasks; +using MimeKit; using Ombi.Notifications.Models; using Ombi.Settings.Settings.Models.Notifications; @@ -8,5 +9,6 @@ namespace Ombi.Notifications { Task Send(NotificationMessage model, EmailNotificationSettings settings); Task SendAdHoc(NotificationMessage model, EmailNotificationSettings settings); + Task Send(MimeMessage message, EmailNotificationSettings settings); } } \ No newline at end of file diff --git a/src/Ombi.Notifications/NotificationMessageCurlys.cs b/src/Ombi.Notifications/NotificationMessageCurlys.cs index c1049e703..407490240 100644 --- a/src/Ombi.Notifications/NotificationMessageCurlys.cs +++ b/src/Ombi.Notifications/NotificationMessageCurlys.cs @@ -105,13 +105,10 @@ namespace Ombi.Notifications AdditionalInformation = opts?.AdditionalInformation ?? string.Empty; } - public void SetupNewsletter(CustomizationSettings s, OmbiUser username) + public void SetupNewsletter(CustomizationSettings s) { ApplicationUrl = (s?.ApplicationUrl.HasValue() ?? false) ? s.ApplicationUrl : string.Empty; ApplicationName = string.IsNullOrEmpty(s?.ApplicationName) ? "Ombi" : s?.ApplicationName; - RequestedUser = username.UserName; - UserName = username.UserName; - Alias = username.Alias.HasValue() ? username.Alias : username.UserName; } public void Setup(NotificationOptions opts, ChildRequests req, CustomizationSettings s, UserNotificationPreferences pref) diff --git a/src/Ombi.Schedule/Jobs/Ombi/NewsletterJob.cs b/src/Ombi.Schedule/Jobs/Ombi/NewsletterJob.cs index ab0ef9578..62fc1352f 100644 --- a/src/Ombi.Schedule/Jobs/Ombi/NewsletterJob.cs +++ b/src/Ombi.Schedule/Jobs/Ombi/NewsletterJob.cs @@ -9,6 +9,7 @@ using MailKit; using Microsoft.AspNetCore.Identity; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; +using MimeKit; using Ombi.Api.Lidarr; using Ombi.Api.Lidarr.Models; using Ombi.Api.TheMovieDb; @@ -24,6 +25,7 @@ using Ombi.Settings.Settings.Models.External; using Ombi.Settings.Settings.Models.Notifications; using Ombi.Store.Entities; using Ombi.Store.Repository; +using ContentType = Ombi.Store.Entities.ContentType; namespace Ombi.Schedule.Jobs.Ombi { @@ -162,7 +164,23 @@ namespace Ombi.Schedule.Jobs.Ombi Email = emails }); } - var emailTasks = new List(); + + var messageContent = ParseTemplate(template, customization); + var email = new NewsletterTemplate(); + + var html = email.LoadTemplate(messageContent.Subject, messageContent.Message, body, customization.Logo); + + var bodyBuilder = new BodyBuilder + { + HtmlBody = html, + }; + + var message = new MimeMessage + { + Body = bodyBuilder.ToMessageBody(), + Subject = messageContent.Subject + }; + foreach (var user in users) { // Get the users to send it to @@ -170,17 +188,13 @@ namespace Ombi.Schedule.Jobs.Ombi { continue; } - - var messageContent = ParseTemplate(template, customization, user); - var email = new NewsletterTemplate(); - - var html = email.LoadTemplate(messageContent.Subject, messageContent.Message, body, customization.Logo); - - emailTasks.Add(_email.Send( - new NotificationMessage { Message = html, Subject = messageContent.Subject, To = user.Email }, - emailSettings)); + // BCC the messages + message.Bcc.Add(new MailboxAddress(user.Email, user.Email)); } + // Send the email + await _email.Send(message, emailSettings); + // Now add all of this to the Recently Added log var recentlyAddedLog = new HashSet(); foreach (var p in plexContentMoviesToSend) @@ -234,7 +248,6 @@ namespace Ombi.Schedule.Jobs.Ombi }); } await _recentlyAddedLog.AddRange(recentlyAddedLog); - await Task.WhenAll(emailTasks.ToArray()); } else { @@ -245,7 +258,7 @@ namespace Ombi.Schedule.Jobs.Ombi { continue; } - var messageContent = ParseTemplate(template, customization, a); + var messageContent = ParseTemplate(template, customization); var email = new NewsletterTemplate(); @@ -305,12 +318,12 @@ namespace Ombi.Schedule.Jobs.Ombi return itemsToReturn; } - private NotificationMessageContent ParseTemplate(NotificationTemplates template, CustomizationSettings settings, OmbiUser username) + private NotificationMessageContent ParseTemplate(NotificationTemplates template, CustomizationSettings settings) { var resolver = new NotificationMessageResolver(); var curlys = new NotificationMessageCurlys(); - curlys.SetupNewsletter(settings, username); + curlys.SetupNewsletter(settings); return resolver.ParseMessage(template, curlys); }