private void StartNewsLetter(NewletterSettings newletterSettings, bool testEmail = false) { var embySettings = EmbySettings.GetSettings(); if (embySettings.Enable) { var html = EmbyNewsletter.GetNewsletterHtml(testEmail); var escapedHtml = new string(html.Where(c => !char.IsControl(c)).ToArray()); Log.Debug(escapedHtml); SendNewsletter(newletterSettings, escapedHtml, testEmail, "New Content On Emby!"); } else { var plexSettings = PlexSettings.GetSettings(); if (plexSettings.Enable) { var html = PlexNewsletter.GetNewsletterHtml(testEmail); var escapedHtml = new string(html.Where(c => !char.IsControl(c)).ToArray()); Log.Debug(escapedHtml); SendNewsletter(newletterSettings, html, testEmail); } } }
private void StartNewsLetter(NewletterSettings newletterSettings, bool testEmail = false) { var embySettings = EmbySettings.GetSettings(); if (embySettings.Enable) { var letter = EmbyNewsletter.GetNewsletter(testEmail) ?? new Newsletter(); if (letter.Send || testEmail) { SendNewsletter(newletterSettings, letter.Html, testEmail, "New Content On Emby!"); } else { Log.Warn("There is no new content to send the newsletter"); } } else { var plexSettings = PlexSettings.GetSettings(); if (plexSettings.Enable) { var letter = PlexNewsletter.GetNewsletter(testEmail) ?? new Newsletter(); if (letter.Send || testEmail) { SendNewsletter(newletterSettings, letter.Html, testEmail); } } } }
private void SendNewsletter(NewletterSettings newletterSettings, string html, bool testEmail = false, string subject = "New Content on Plex!") { Log.Debug("Entering SendNewsletter"); var settings = EmailSettings.GetSettings(); if (!settings.Enabled || string.IsNullOrEmpty(settings.EmailHost)) { return; } var body = new BodyBuilder { HtmlBody = html, TextBody = "This email is only available on devices that support HTML." }; var message = new MimeMessage { Body = body.ToMessageBody(), Subject = subject }; Log.Debug("Created Plain/HTML MIME body"); if (!testEmail) { var users = UserHelper.GetUsersWithFeature(Features.Newsletter); if (users != null) { foreach (var user in users) { if (!string.IsNullOrEmpty(user.EmailAddress)) { message.Bcc.Add(new MailboxAddress(user.Username, user.EmailAddress)); } } } if (newletterSettings.CustomUsersEmailAddresses != null && newletterSettings.CustomUsersEmailAddresses.Any()) { foreach (var user in newletterSettings.CustomUsersEmailAddresses) { if (!string.IsNullOrEmpty(user)) { message.Bcc.Add(new MailboxAddress(user, user)); } } } } message.Bcc.Add(new MailboxAddress(settings.EmailUsername, settings.RecipientEmail)); // Include the admin message.From.Add(new MailboxAddress(settings.EmailUsername, settings.EmailSender)); SendMail(settings, message); }
private void Start(NewletterSettings newletterSettings, bool testEmail = false) { var sb = new StringBuilder(); var plexSettings = PlexSettings.GetSettings(); var libs = Api.GetLibrarySections(plexSettings.PlexAuthToken, plexSettings.FullUri); var tvSection = libs.Directories.FirstOrDefault(x => x.type.Equals(PlexMediaType.Show.ToString(), StringComparison.CurrentCultureIgnoreCase)); var movieSection = libs.Directories.FirstOrDefault(x => x.type.Equals(PlexMediaType.Movie.ToString(), StringComparison.CurrentCultureIgnoreCase)); var recentlyAddedTv = Api.RecentlyAdded(plexSettings.PlexAuthToken, plexSettings.FullUri, tvSection.Key); var recentlyAddedMovies = Api.RecentlyAdded(plexSettings.PlexAuthToken, plexSettings.FullUri, movieSection.Key); GenerateMovieHtml(recentlyAddedMovies, plexSettings, sb); GenerateTvHtml(recentlyAddedTv, plexSettings, sb); var template = new RecentlyAddedTemplate(); var html = template.LoadTemplate(sb.ToString()); Send(newletterSettings, html, plexSettings, testEmail); }
private void Send(NewletterSettings newletterSettings, string html, PlexSettings plexSettings, bool testEmail = false) { var settings = EmailSettings.GetSettings(); if (!settings.Enabled || string.IsNullOrEmpty(settings.EmailHost)) { return; } var body = new BodyBuilder { HtmlBody = html, TextBody = "This email is only available on devices that support HTML." }; var message = new MimeMessage { Body = body.ToMessageBody(), Subject = "New Content on Plex!", }; if (!testEmail) { if (newletterSettings.SendToPlexUsers) { var users = Api.GetUsers(plexSettings.PlexAuthToken); foreach (var user in users.User) { message.Bcc.Add(new MailboxAddress(user.Username, user.Email)); } } if (newletterSettings.CustomUsersEmailAddresses.Any()) { foreach (var user in newletterSettings.CustomUsersEmailAddresses) { message.Bcc.Add(new MailboxAddress(user, user)); } } } message.Bcc.Add(new MailboxAddress(settings.EmailUsername, settings.RecipientEmail)); // Include the admin message.From.Add(new MailboxAddress(settings.EmailUsername, settings.EmailSender)); try { using (var client = new SmtpClient()) { client.Connect(settings.EmailHost, settings.EmailPort); // Let MailKit figure out the correct SecureSocketOptions. // Note: since we don't have an OAuth2 token, disable // the XOAUTH2 authentication mechanism. client.AuthenticationMechanisms.Remove("XOAUTH2"); if (settings.Authentication) { client.Authenticate(settings.EmailUsername, settings.EmailPassword); } Log.Info("sending message to {0} \r\n from: {1}\r\n Are we authenticated: {2}", message.To, message.From, client.IsAuthenticated); client.Send(message); client.Disconnect(true); } } catch (Exception e) { Log.Error(e); } }
private void Start(NewletterSettings newletterSettings, bool testEmail = false) { var sb = new StringBuilder(); var plexSettings = PlexSettings.GetSettings(); Log.Debug("Got Plex Settings"); var libs = Api.GetLibrarySections(plexSettings.PlexAuthToken, plexSettings.FullUri); Log.Debug("Getting Plex Library Sections"); var tvSections = libs.Directories.Where(x => x.type.Equals(PlexMediaType.Show.ToString(), StringComparison.CurrentCultureIgnoreCase)); // We could have more than 1 lib Log.Debug("Filtered sections for TV"); var movieSection = libs.Directories.Where(x => x.type.Equals(PlexMediaType.Movie.ToString(), StringComparison.CurrentCultureIgnoreCase)); // We could have more than 1 lib Log.Debug("Filtered sections for Movies"); var plexVersion = Api.GetStatus(plexSettings.PlexAuthToken, plexSettings.FullUri).Version; var html = string.Empty; if (plexVersion.StartsWith("1.3")) { var tvMetadata = new List <Metadata>(); var movieMetadata = new List <Metadata>(); foreach (var tvSection in tvSections) { var item = Api.RecentlyAdded(plexSettings.PlexAuthToken, plexSettings.FullUri, tvSection?.Key); if (item?.MediaContainer?.Metadata != null) { tvMetadata.AddRange(item?.MediaContainer?.Metadata); } } Log.Debug("Got RecentlyAdded TV Shows"); foreach (var movie in movieSection) { var recentlyAddedMovies = Api.RecentlyAdded(plexSettings.PlexAuthToken, plexSettings.FullUri, movie?.Key); if (recentlyAddedMovies?.MediaContainer?.Metadata != null) { movieMetadata.AddRange(recentlyAddedMovies?.MediaContainer?.Metadata); } } Log.Debug("Got RecentlyAdded Movies"); Log.Debug("Started Generating Movie HTML"); GenerateMovieHtml(movieMetadata, plexSettings, sb); Log.Debug("Finished Generating Movie HTML"); Log.Debug("Started Generating TV HTML"); GenerateTvHtml(tvMetadata, plexSettings, sb); Log.Debug("Finished Generating TV HTML"); var template = new RecentlyAddedTemplate(); html = template.LoadTemplate(sb.ToString()); Log.Debug("Loaded the template"); } else { // Old API var tvChild = new List <RecentlyAddedChild>(); var movieChild = new List <RecentlyAddedChild>(); foreach (var tvSection in tvSections) { var recentlyAddedTv = Api.RecentlyAddedOld(plexSettings.PlexAuthToken, plexSettings.FullUri, tvSection?.Key); if (recentlyAddedTv?._children != null) { tvChild.AddRange(recentlyAddedTv?._children); } } Log.Debug("Got RecentlyAdded TV Shows"); foreach (var movie in movieSection) { var recentlyAddedMovies = Api.RecentlyAddedOld(plexSettings.PlexAuthToken, plexSettings.FullUri, movie?.Key); if (recentlyAddedMovies?._children != null) { tvChild.AddRange(recentlyAddedMovies?._children); } } Log.Debug("Got RecentlyAdded Movies"); Log.Debug("Started Generating Movie HTML"); GenerateMovieHtml(movieChild, plexSettings, sb); Log.Debug("Finished Generating Movie HTML"); Log.Debug("Started Generating TV HTML"); GenerateTvHtml(tvChild, plexSettings, sb); Log.Debug("Finished Generating TV HTML"); var template = new RecentlyAddedTemplate(); html = template.LoadTemplate(sb.ToString()); Log.Debug("Loaded the template"); } Send(newletterSettings, html, plexSettings, testEmail); }