Added reply-to header to newsletter mails where author has ContactEmail set
This commit is contained in:
parent
9d528dc8f2
commit
4355a61483
|
@ -19,16 +19,18 @@ public class EmailFactory(IOptions<Customization> customizations, EmailTemplateS
|
||||||
return new StaticEmail(receiverMail, receiverName, subject, title, body, FrozenDictionary<string, string>.Empty);
|
return new StaticEmail(receiverMail, receiverName, subject, title, body, FrozenDictionary<string, string>.Empty);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async ValueTask<IEmail> CreateSubscribedEmail(EmailSubscriber subscriber, string browserLink, string subject, string title, string bodyHtml, string role = "unknown") {
|
public async ValueTask<IEmail> CreateSubscribedEmail(EmailSubscriber subscriber, string browserLink, string subject, string title, string bodyHtml, string role = "unknown", string? replyTo = null) {
|
||||||
(string host, string logo) = GetStaticData();
|
(string host, string logo) = GetStaticData();
|
||||||
|
|
||||||
string unsubscribeLink = await GetUnsubscribeLink(host, subscriber.Id, role);
|
string unsubscribeLink = await GetUnsubscribeLink(host, subscriber.Id, role);
|
||||||
string body = await TemplateService.NewsletterAsync(host, browserLink, logo, title, bodyHtml, unsubscribeLink);
|
string body = await TemplateService.NewsletterAsync(host, browserLink, logo, title, bodyHtml, unsubscribeLink);
|
||||||
|
|
||||||
return new StaticEmail(subscriber.Email, subscriber.Name, subject, title, body, new Dictionary<string, string>{
|
var headers = new Dictionary<string, string>{
|
||||||
{HeaderId.ListUnsubscribe.ToHeaderName(), $"<{unsubscribeLink}>"},
|
{HeaderId.ListUnsubscribe.ToHeaderName(), $"<{unsubscribeLink}>"},
|
||||||
{HeaderId.ListUnsubscribePost.ToHeaderName(), "One-Click"}
|
{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<IEmail> CreateWelcomeEmail(EmailSubscriber subscriber, IEnumerable<EmailNewsletter> articles, string subject, string title, string bodyHtml) {
|
public async ValueTask<IEmail> CreateWelcomeEmail(EmailSubscriber subscriber, IEnumerable<EmailNewsletter> articles, string subject, string title, string bodyHtml) {
|
||||||
|
|
|
@ -35,6 +35,9 @@ public class NewsletterBackgroundService(ILogger<NewsletterBackgroundService> lo
|
||||||
Logger.LogInformation("Cancellation requested, skipping processing '{title}'.", newsletter.Article.Title);
|
Logger.LogInformation("Cancellation requested, skipping processing '{title}'.", newsletter.Article.Title);
|
||||||
return;
|
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);
|
Logger.LogInformation("Processing '{title}'.", newsletter.Article.Title);
|
||||||
// set newsletter to send first, so we don't spam people
|
// set newsletter to send first, so we don't spam people
|
||||||
|
@ -53,7 +56,7 @@ public class NewsletterBackgroundService(ILogger<NewsletterBackgroundService> lo
|
||||||
|
|
||||||
foreach (var subscriber in subscribers) {
|
foreach (var subscriber in subscribers) {
|
||||||
var email = await factory.CreateSubscribedEmail(subscriber, articleLink, newsletter.Article.Title,
|
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);
|
await client.SendEmailAsync(email);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue