From 4355a61483c97f5ac5a51c0062c665e818a80982 Mon Sep 17 00:00:00 2001 From: Mia Winter Date: Mon, 19 Feb 2024 00:31:40 +0100 Subject: [PATCH] Added reply-to header to newsletter mails where author has ContactEmail set --- Wave/Services/EmailFactory.cs | 8 +++++--- Wave/Services/NewsletterBackgroundService.cs | 5 ++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/Wave/Services/EmailFactory.cs b/Wave/Services/EmailFactory.cs index 182bcf6..bd76f3f 100644 --- a/Wave/Services/EmailFactory.cs +++ b/Wave/Services/EmailFactory.cs @@ -19,16 +19,18 @@ public class EmailFactory(IOptions customizations, EmailTemplateS return new StaticEmail(receiverMail, receiverName, subject, title, body, FrozenDictionary.Empty); } - public async ValueTask CreateSubscribedEmail(EmailSubscriber subscriber, string browserLink, string subject, string title, string bodyHtml, string role = "unknown") { + public async ValueTask CreateSubscribedEmail(EmailSubscriber subscriber, string browserLink, string subject, string title, string bodyHtml, string role = "unknown", string? replyTo = null) { (string host, string logo) = GetStaticData(); string unsubscribeLink = await GetUnsubscribeLink(host, subscriber.Id, role); string body = await TemplateService.NewsletterAsync(host, browserLink, logo, title, bodyHtml, unsubscribeLink); - return new StaticEmail(subscriber.Email, subscriber.Name, subject, title, body, new Dictionary{ + var headers = new Dictionary{ {HeaderId.ListUnsubscribe.ToHeaderName(), $"<{unsubscribeLink}>"}, {HeaderId.ListUnsubscribePost.ToHeaderName(), "One-Click"} - }.ToFrozenDictionary()); + }; + if (!string.IsNullOrWhiteSpace(replyTo)) headers.Add(HeaderId.ReplyTo.ToHeaderName(), replyTo); + return new StaticEmail(subscriber.Email, subscriber.Name, subject, title, body, headers.ToFrozenDictionary()); } public async ValueTask CreateWelcomeEmail(EmailSubscriber subscriber, IEnumerable articles, string subject, string title, string bodyHtml) { diff --git a/Wave/Services/NewsletterBackgroundService.cs b/Wave/Services/NewsletterBackgroundService.cs index 22e151f..2d2eebc 100644 --- a/Wave/Services/NewsletterBackgroundService.cs +++ b/Wave/Services/NewsletterBackgroundService.cs @@ -35,6 +35,9 @@ public class NewsletterBackgroundService(ILogger lo Logger.LogInformation("Cancellation requested, skipping processing '{title}'.", newsletter.Article.Title); return; } + string replyTo = ""; + if (!string.IsNullOrWhiteSpace(newsletter.Article.Author.ContactEmail)) + replyTo = $"{newsletter.Article.Author.Name} <{newsletter.Article.Author.ContactEmail}>"; Logger.LogInformation("Processing '{title}'.", newsletter.Article.Title); // set newsletter to send first, so we don't spam people @@ -53,7 +56,7 @@ public class NewsletterBackgroundService(ILogger lo foreach (var subscriber in subscribers) { var email = await factory.CreateSubscribedEmail(subscriber, articleLink, newsletter.Article.Title, - newsletter.Article.Title, newsletter.Article.BodyHtml, newsletter.Id.ToString()); + newsletter.Article.Title, newsletter.Article.BodyHtml, newsletter.Id.ToString(), replyTo); await client.SendEmailAsync(email); } }