using System; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Bit.Core.Settings; using Microsoft.AspNetCore.Hosting; using System.Net.Http; using Bit.Core.Models.Mail; namespace Bit.Core.Services { public class MultiServiceMailDeliveryService : IMailDeliveryService { private readonly IMailDeliveryService _sesService; private readonly IMailDeliveryService _postalService; private readonly int _postalPercentage; private static Random _random = new Random(); public MultiServiceMailDeliveryService( GlobalSettings globalSettings, IWebHostEnvironment hostingEnvironment, IHttpClientFactory httpClientFactory, ILogger sesLogger, ILogger postalLogger) { _sesService = new AmazonSesMailDeliveryService(globalSettings, hostingEnvironment, sesLogger); _postalService = new PostalMailDeliveryService(globalSettings, postalLogger, hostingEnvironment, httpClientFactory); // 2% by default _postalPercentage = (globalSettings.Mail?.PostalPercentage).GetValueOrDefault(2); } public async Task SendEmailAsync(MailMessage message) { var roll = _random.Next(0, 99); if (roll < _postalPercentage) { await _postalService.SendEmailAsync(message); } else { await _sesService.SendEmailAsync(message); } } } }