@@ -23,18 +23,20 @@ namespace MailKitSimplified.Sender.Services
2323 /// <inheritdoc cref="ISmtpSender" />
2424 public sealed class SmtpSender : ISmtpSender
2525 {
26- private ISmtpClient _smtpClient ;
27- private IProtocolLogger _smtpLogger ;
28- private Func < ISmtpClient , Task > _customAuthenticationMethod ;
2926 private CancellationTokenSource _cts = null ;
3027 private readonly ConcurrentQueue < MimeMessage > _sendQueue = new ConcurrentQueue < MimeMessage > ( ) ;
28+ private Func < ISmtpClient , Task > _customAuthenticationMethod ;
29+ private ISmtpClient _smtpClient ;
30+ private IProtocolLogger _smtpLogger ;
3131 private ILogger < SmtpSender > _logger ;
32+ private ILoggerFactory _loggerFactory ;
3233 private readonly EmailSenderOptions _senderOptions ;
3334
3435 /// <inheritdoc cref="ISmtpSender" />
35- public SmtpSender ( IOptions < EmailSenderOptions > senderOptions , ILogger < SmtpSender > logger = null , IProtocolLogger protocolLogger = null , ISmtpClient smtpClient = null )
36+ public SmtpSender ( IOptions < EmailSenderOptions > senderOptions , ILogger < SmtpSender > logger = null , IProtocolLogger protocolLogger = null , ISmtpClient smtpClient = null , ILoggerFactory loggerFactory = null )
3637 {
37- _logger = logger ?? NullLogger < SmtpSender > . Instance ;
38+ _loggerFactory = loggerFactory ?? NullLoggerFactory . Instance ;
39+ _logger = logger ?? _loggerFactory . CreateLogger < SmtpSender > ( ) ;
3840 _senderOptions = senderOptions . Value ;
3941 if ( string . IsNullOrWhiteSpace ( _senderOptions . SmtpHost ) )
4042 throw new ArgumentException ( $ "{ nameof ( EmailSenderOptions . SmtpHost ) } is not set.") ;
@@ -44,31 +46,31 @@ public SmtpSender(IOptions<EmailSenderOptions> senderOptions, ILogger<SmtpSender
4446 SetSmtpClient ( smtpClient ) ;
4547 }
4648
47- public static SmtpSender Create ( string smtpHost , ushort smtpPort = 0 , string username = null , string password = null , string protocolLog = null , bool protocolLogFileAppend = false , ILogger < SmtpSender > logger = null , IProtocolLogger protocolLogger = null , ISmtpClient smtpClient = null )
49+ public static SmtpSender Create ( string smtpHost , ushort smtpPort = 0 , string username = null , string password = null , string protocolLog = null , bool protocolLogFileAppend = false , ILogger < SmtpSender > logger = null , IProtocolLogger protocolLogger = null , ISmtpClient smtpClient = null , ILoggerFactory loggerFactory = null )
4850 {
4951 var smtpCredential = new NetworkCredential ( username , password ) ;
50- var sender = Create ( smtpHost , smtpCredential , smtpPort , protocolLog , protocolLogFileAppend , logger , protocolLogger , smtpClient ) ;
52+ var sender = Create ( smtpHost , smtpCredential , smtpPort , protocolLog , protocolLogFileAppend , logger , protocolLogger , smtpClient , loggerFactory ) ;
5153 return sender ;
5254 }
5355
54- public static SmtpSender Create ( string smtpHost , NetworkCredential smtpCredential , ushort smtpPort = 0 , string protocolLog = null , bool protocolLogFileAppend = false , ILogger < SmtpSender > logger = null , IProtocolLogger protocolLogger = null , ISmtpClient smtpClient = null )
56+ public static SmtpSender Create ( string smtpHost , NetworkCredential smtpCredential , ushort smtpPort = 0 , string protocolLog = null , bool protocolLogFileAppend = false , ILogger < SmtpSender > logger = null , IProtocolLogger protocolLogger = null , ISmtpClient smtpClient = null , ILoggerFactory loggerFactory = null )
5557 {
5658 var senderOptions = new EmailSenderOptions ( smtpHost , smtpCredential , smtpPort , protocolLog , protocolLogFileAppend ) ;
57- var sender = Create ( senderOptions , logger , protocolLogger , smtpClient ) ;
59+ var sender = Create ( senderOptions , logger , protocolLogger , smtpClient , loggerFactory ) ;
5860 return sender ;
5961 }
6062
61- public static SmtpSender Create ( EmailSenderOptions emailSenderOptions , ILogger < SmtpSender > logger = null , IProtocolLogger protocolLogger = null , ISmtpClient smtpClient = null )
63+ public static SmtpSender Create ( EmailSenderOptions emailSenderOptions , ILogger < SmtpSender > logger = null , IProtocolLogger protocolLogger = null , ISmtpClient smtpClient = null , ILoggerFactory loggerFactory = null )
6264 {
6365 var senderOptions = Options . Create ( emailSenderOptions ) ;
64- var sender = new SmtpSender ( senderOptions , logger , protocolLogger , smtpClient ) ;
66+ var sender = new SmtpSender ( senderOptions , logger , protocolLogger , smtpClient , loggerFactory ) ;
6567 return sender ;
6668 }
6769
68- public static SmtpSender Create ( ISmtpClient smtpClient , EmailSenderOptions emailSenderOptions , ILogger < SmtpSender > logger = null )
70+ public static SmtpSender Create ( ISmtpClient smtpClient , EmailSenderOptions emailSenderOptions , ILogger < SmtpSender > logger = null , ILoggerFactory loggerFactory = null )
6971 {
7072 var senderOptions = Options . Create ( emailSenderOptions ) ;
71- var sender = new SmtpSender ( senderOptions , logger , null , smtpClient ) ;
73+ var sender = new SmtpSender ( senderOptions , logger , null , smtpClient , loggerFactory ) ;
7274 return sender ;
7375 }
7476
@@ -111,11 +113,12 @@ public SmtpSender SetProtocolLog(string logFilePath, bool append = false)
111113
112114 /// <summary>
113115 /// For those not using dependency injection.
114- /// <example>LoggerFactory.Create(_ => _.SetMinimumLevel(LogLevel.Debug).AddDebug().AddConsole()).CreateLogger<SmtpSender>() ;</example>
116+ /// <example>LoggerFactory.Create(_ => _.SetMinimumLevel(LogLevel.Debug).AddDebug().AddConsole());</example>
115117 /// </summary>
116- public SmtpSender SetLogger ( ILogger < SmtpSender > logger )
118+ public SmtpSender SetLogger ( ILoggerFactory loggerFactory , ILogger < SmtpSender > logger )
117119 {
118- _logger = logger ?? NullLogger < SmtpSender > . Instance ;
120+ _loggerFactory = loggerFactory ?? _loggerFactory ?? NullLoggerFactory . Instance ;
121+ _logger = logger ?? _logger ?? _loggerFactory . CreateLogger < SmtpSender > ( ) ;
119122 return this ;
120123 }
121124
@@ -154,7 +157,7 @@ public SmtpSender SetCustomAuthentication(Func<ISmtpClient, Task> customAuthenti
154157 return this ;
155158 }
156159
157- public IEmailWriter WriteEmail => new EmailWriter ( this ) ;
160+ public IEmailWriter WriteEmail => new EmailWriter ( this , _loggerFactory . CreateLogger < EmailWriter > ( ) ) ;
158161
159162 [ Obsolete ( "Use EmailSenderOptions.CreateProtocolLogger instead." ) ]
160163 public static IProtocolLogger GetProtocolLogger ( string logFilePath = null , bool append = false , IFileSystem fileSystem = null )
0 commit comments