diff --git a/Wave/Services/EmailTemplateService.cs b/Wave/Services/EmailTemplateService.cs
index bc12b97..9fced40 100644
--- a/Wave/Services/EmailTemplateService.cs
+++ b/Wave/Services/EmailTemplateService.cs
@@ -77,6 +77,15 @@ public enum Constants {
FileSystem.GetEmailTemplate("default", DefaultTemplates["default"]);
FileSystem.GetEmailTemplate("newsletter", DefaultTemplates["newsletter"]);
FileSystem.GetEmailTemplate("welcome", DefaultTemplates["welcome"]);
+ FileSystem.GetPartialTemplateAsync("email-article",
+ """
+
+
{0}
+
{1}
+
{2}...
+
Link
+
+ """);
}
public string ApplyTokens(string template, Func replacer) {
diff --git a/Wave/Services/SmtpEmailSender.cs b/Wave/Services/SmtpEmailSender.cs
index 555d419..a9903cd 100644
--- a/Wave/Services/SmtpEmailSender.cs
+++ b/Wave/Services/SmtpEmailSender.cs
@@ -11,10 +11,11 @@
namespace Wave.Services;
-public class SmtpEmailSender(ILogger logger, IOptions config, IOptions customizations, EmailTemplateService templateService) : IEmailSender, IAdvancedEmailSender {
+public class SmtpEmailSender(ILogger logger, IOptions config, IOptions customizations, EmailTemplateService templateService, FileSystemService fileSystemService) : IEmailSender, IAdvancedEmailSender {
private ILogger Logger { get; } = logger;
private SmtpConfiguration Configuration { get; } = config.Value;
private Customization Customizations { get; } = customizations.Value;
+ private FileSystemService FileSystemService { get; } = fileSystemService;
private EmailTemplateService TemplateService { get; } = templateService;
public Task SendConfirmationLinkAsync(ApplicationUser user, string email, string confirmationLink) =>
@@ -106,19 +107,20 @@ public Task SendEmailAsync(string email, string? name, string subject, string ht
.CreateConfirmTokensAsync(subscriber.Id, "unsubscribe-welcome", TimeSpan.FromDays(30));
var host = new Uri(string.IsNullOrWhiteSpace(Customizations.AppUrl) ? "" : Customizations.AppUrl); // TODO get link
+ string articlePartial = (await FileSystemService.GetPartialTemplateAsync("email-article", """
+
+
{0}
+
{1}
+
{2}...
+
Link
+
+ """))!;
var articlesHtml = new StringBuilder("");
foreach (var n in articles) {
string articleLink = ArticleUtilities.GenerateArticleLink(n.Article, new Uri(Customizations.AppUrl, UriKind.Absolute));
articlesHtml.AppendFormat(
- """
-
-
{0}
-
{1}
-
{2}
-
Link
-
- """,
- n.Article.Title, n.Article.Author.Name, n.Article.Body[..Math.Min(100, n.Article.Body.Length)], articleLink);
+ articlePartial,
+ n.Article.Title, n.Article.Author.Name, n.Article.Body[..Math.Min(250, n.Article.Body.Length)], articleLink);
}
string logo = !string.IsNullOrWhiteSpace(Customizations.LogoLink)