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);
}