using Microsoft.Extensions.Logging;
namespace zero.Mails;
///
/// Default implementation of an IMailSender which sends the mail to the attached logger
/// and therefore not using the SMTP channel.
/// Implementing real mail sending is up to the consuming application.
///
public class LoggerMailDispatcher : IMailDispatcher
{
protected Queue Queue { get; private set; } = new Queue();
protected ILogger Logger { get; set; }
public LoggerMailDispatcher(ILogger logger)
{
Logger = logger;
}
///
public void Enqueue(Mail message)
{
Queue.Enqueue(message);
}
///
public Task Send(CancellationToken token = default)
{
while (Queue.Count > 0)
{
Mail message = Queue.Dequeue();
Logger.LogInformation("Mail to {to}. Subject: {subject}", message.To[0].Address, message.Subject);
}
return Task.CompletedTask;
}
///
public void Dispose() { }
}