public EnqueueMailCommandHandler(IMailTypeCatalog mailTypeCatalog, IMailSenderService mailSenderService) { _mailTypeCatalog = mailTypeCatalog ?? throw new ArgumentNullException(nameof(mailTypeCatalog)); _mailSenderService = mailSenderService ?? throw new ArgumentNullException(nameof(mailSenderService)); }
public MailSenderService(IServiceScopeFactory serviceScopeFactory, IMailTypeCatalog mailTypeCatalog, IGuidProvider guidProvider, IClock clock, IOptions <SmtpOptions>?smtpOptions, IOptions <MailSenderServiceOptions>?options, ILogger <MailSenderService>?logger) { if (guidProvider == null) { throw new ArgumentNullException(nameof(guidProvider)); } _serviceScopeFactory = serviceScopeFactory ?? throw new ArgumentNullException(nameof(serviceScopeFactory)); _mailTypeCatalog = mailTypeCatalog ?? throw new ArgumentNullException(nameof(mailTypeCatalog)); _clock = clock ?? throw new ArgumentNullException(nameof(clock)); var smtpOptionsValue = smtpOptions?.Value; var usePickupDir = smtpOptionsValue?.UsePickupDir ?? true; if (usePickupDir) { var pickupDirPath = smtpOptionsValue?.PickupDirPath ?? string.Empty; if (!Path.IsPathRooted(pickupDirPath)) { pickupDirPath = Path.Combine(AppContext.BaseDirectory, pickupDirPath); } _smtpClientFactory = () => new PickupDirMailClient(guidProvider, pickupDirPath); } else { _smtpHost = smtpOptionsValue !.Host ?? throw new ArgumentException($"{nameof(SmtpOptions.Host)} must be specified.", nameof(smtpOptions)); _smtpPort = smtpOptionsValue.Port ?? SmtpOptions.DefaultPort; _smtpSecurity = smtpOptionsValue.Security ?? SmtpOptions.DefaultSecurity; var smtpUserName = smtpOptionsValue.UserName; var smtpPassword = smtpOptionsValue.Password; _smtpCredentials = smtpUserName != null || smtpPassword != null ? new NetworkCredential(smtpUserName, smtpPassword) : null; var smtpTimeout = smtpOptionsValue.Timeout ?? SmtpOptions.DefaultTimeout; _smtpClientFactory = () => new SmtpClient { Timeout = checked ((int)smtpTimeout.TotalMilliseconds) }; } _smtpClient = _smtpClientFactory(); var optionsValue = options?.Value; _batchSize = optionsValue?.BatchSize ?? MailSenderServiceOptions.DefaultBatchSize; _maxSleepTime = optionsValue?.MaxSleepTime ?? MailSenderServiceOptions.DefaultMaxSleepTime; _initialSendRetryTime = optionsValue?.InitialSendRetryTime ?? _maxSleepTime; if (_initialSendRetryTime <= TimeSpan.Zero) { _initialSendRetryTime = MailSenderServiceOptions.DefaultInitialSendRetryTime; } _maxSendRetryTime = optionsValue?.MaxSendRetryTime ?? MailSenderServiceOptions.DefaultMaxSendRetryTime; if (_maxSendRetryTime < _initialSendRetryTime) { _maxSendRetryTime = _initialSendRetryTime; } _delayOnUnexpectedError = optionsValue?.DelayOnUnexpectedError ?? MailSenderServiceOptions.DefaultDelayOnUnexpectedError; _logger = logger ?? (ILogger)NullLogger.Instance; }