using System.Globalization; using MimeKit; using SQLInsight.Notifications; namespace SQLInsight.Reports; /// Sends the management report as a PDF attachment through the same SMTP server as notifications. public static class ReportMailer { private static readonly CultureInfo Danish = CultureInfo.GetCultureInfo("da-DK"); public static MimeMessage Build(EmailOptions smtp, IEnumerable recipients, ReportData data, string periodName) { ArgumentNullException.ThrowIfNull(smtp); ArgumentNullException.ThrowIfNull(recipients); ArgumentNullException.ThrowIfNull(data); var message = new MimeMessage(); message.From.Add(MailboxAddress.Parse(smtp.From)); foreach (var to in recipients) { message.To.Add(MailboxAddress.Parse(to)); } message.Subject = $"SQLInsight: Driftsrapport for {data.Organization}, {periodName}"; var body = new BodyBuilder { TextBody = $"Driftsrapport for SQL Server, {periodName}.\n\n" + string.Join("\n", ManagementReport.SummarySentences(data).Select(s => "• " + s)) + "\n\nDen fulde rapport er vedhæftet som PDF.\n\nSendt af SQLInsight Pro", }; body.Attachments.Add($"driftsrapport-{data.From.ToString("yyyy-MM", CultureInfo.InvariantCulture)}.pdf", ManagementReport.Render(data), new ContentType("application", "pdf")); message.Body = body.ToMessageBody(); return message; } public static string MonthName(DateTimeOffset firstOfMonth) => firstOfMonth.ToString("MMMM yyyy", Danish); public static Task SendAsync(EmailOptions smtp, MimeMessage message, CancellationToken cancellationToken) => EmailChannel.SendMessageAsync(smtp, message, cancellationToken); }