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)
{
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)

View file

@ -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);
}
}

View file

@ -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)

View file

@ -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<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)
{
// 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<RecentlyAddedLog>();
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);
}