public EnqueueMailCommandHandler(IMailTypeCatalog mailTypeCatalog, IMailSenderService mailSenderService)
 {
     _mailTypeCatalog   = mailTypeCatalog ?? throw new ArgumentNullException(nameof(mailTypeCatalog));
     _mailSenderService = mailSenderService ?? throw new ArgumentNullException(nameof(mailSenderService));
 }
Пример #2
0
        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;
        }