Make the newsletter BCC the users rather than creating a million newsletters (Hopefully will stop SMTP providers from marking as spam). This does mean that the custom user customization in the newsletter will no longer work

This commit is contained in:
TidusJar 2019-01-07 13:56:21 +00:00
parent b2f13c4120
commit ca516957fa
4 changed files with 40 additions and 21 deletions

View file

@ -97,8 +97,6 @@ namespace Ombi.Notifications
public async Task Send(NotificationMessage model, EmailNotificationSettings settings) public async Task Send(NotificationMessage model, EmailNotificationSettings settings)
{ {
try
{
EnsureArg.IsNotNullOrEmpty(settings.SenderAddress); EnsureArg.IsNotNullOrEmpty(settings.SenderAddress);
EnsureArg.IsNotNullOrEmpty(model.To); EnsureArg.IsNotNullOrEmpty(model.To);
EnsureArg.IsNotNullOrEmpty(model.Message); EnsureArg.IsNotNullOrEmpty(model.Message);
@ -120,9 +118,18 @@ namespace Ombi.Notifications
Subject = model.Subject 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)); 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()) using (var client = new SmtpClient())
{ {
if (settings.DisableCertificateChecking) if (settings.DisableCertificateChecking)

View file

@ -1,4 +1,5 @@
using System.Threading.Tasks; using System.Threading.Tasks;
using MimeKit;
using Ombi.Notifications.Models; using Ombi.Notifications.Models;
using Ombi.Settings.Settings.Models.Notifications; using Ombi.Settings.Settings.Models.Notifications;
@ -8,5 +9,6 @@ namespace Ombi.Notifications
{ {
Task Send(NotificationMessage model, EmailNotificationSettings settings); Task Send(NotificationMessage model, EmailNotificationSettings settings);
Task SendAdHoc(NotificationMessage model, EmailNotificationSettings settings); Task SendAdHoc(NotificationMessage model, EmailNotificationSettings settings);
Task Send(MimeMessage message, EmailNotificationSettings settings);
} }
} }

View file

@ -105,13 +105,10 @@ namespace Ombi.Notifications
AdditionalInformation = opts?.AdditionalInformation ?? string.Empty; 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; ApplicationUrl = (s?.ApplicationUrl.HasValue() ?? false) ? s.ApplicationUrl : string.Empty;
ApplicationName = string.IsNullOrEmpty(s?.ApplicationName) ? "Ombi" : s?.ApplicationName; 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) public void Setup(NotificationOptions opts, ChildRequests req, CustomizationSettings s, UserNotificationPreferences pref)

View file

@ -9,6 +9,7 @@ using MailKit;
using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using MimeKit;
using Ombi.Api.Lidarr; using Ombi.Api.Lidarr;
using Ombi.Api.Lidarr.Models; using Ombi.Api.Lidarr.Models;
using Ombi.Api.TheMovieDb; using Ombi.Api.TheMovieDb;
@ -24,6 +25,7 @@ using Ombi.Settings.Settings.Models.External;
using Ombi.Settings.Settings.Models.Notifications; using Ombi.Settings.Settings.Models.Notifications;
using Ombi.Store.Entities; using Ombi.Store.Entities;
using Ombi.Store.Repository; using Ombi.Store.Repository;
using ContentType = Ombi.Store.Entities.ContentType;
namespace Ombi.Schedule.Jobs.Ombi namespace Ombi.Schedule.Jobs.Ombi
{ {
@ -162,7 +164,23 @@ namespace Ombi.Schedule.Jobs.Ombi
Email = emails Email = emails
}); });
} }
var emailTasks = new List<Task>();
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) foreach (var user in users)
{ {
// Get the users to send it to // Get the users to send it to
@ -170,17 +188,13 @@ namespace Ombi.Schedule.Jobs.Ombi
{ {
continue; continue;
} }
// BCC the messages
var messageContent = ParseTemplate(template, customization, user); message.Bcc.Add(new MailboxAddress(user.Email, user.Email));
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));
} }
// Send the email
await _email.Send(message, emailSettings);
// Now add all of this to the Recently Added log // Now add all of this to the Recently Added log
var recentlyAddedLog = new HashSet<RecentlyAddedLog>(); var recentlyAddedLog = new HashSet<RecentlyAddedLog>();
foreach (var p in plexContentMoviesToSend) foreach (var p in plexContentMoviesToSend)
@ -234,7 +248,6 @@ namespace Ombi.Schedule.Jobs.Ombi
}); });
} }
await _recentlyAddedLog.AddRange(recentlyAddedLog); await _recentlyAddedLog.AddRange(recentlyAddedLog);
await Task.WhenAll(emailTasks.ToArray());
} }
else else
{ {
@ -245,7 +258,7 @@ namespace Ombi.Schedule.Jobs.Ombi
{ {
continue; continue;
} }
var messageContent = ParseTemplate(template, customization, a); var messageContent = ParseTemplate(template, customization);
var email = new NewsletterTemplate(); var email = new NewsletterTemplate();
@ -305,12 +318,12 @@ namespace Ombi.Schedule.Jobs.Ombi
return itemsToReturn; return itemsToReturn;
} }
private NotificationMessageContent ParseTemplate(NotificationTemplates template, CustomizationSettings settings, OmbiUser username) private NotificationMessageContent ParseTemplate(NotificationTemplates template, CustomizationSettings settings)
{ {
var resolver = new NotificationMessageResolver(); var resolver = new NotificationMessageResolver();
var curlys = new NotificationMessageCurlys(); var curlys = new NotificationMessageCurlys();
curlys.SetupNewsletter(settings, username); curlys.SetupNewsletter(settings);
return resolver.ParseMessage(template, curlys); return resolver.ParseMessage(template, curlys);
} }