1
0
mirror of https://github.com/bitwarden/server.git synced 2025-04-25 06:42:22 -05:00
bitwarden/src/Core/Services/Implementations/MultiServiceMailDeliveryService.cs
Kyle Spearrin b150f5977e
add support for postal and multi service mail delivery (#1326)
* adds suppose for postal and multi service mail delivery

* adjust tags

* dont need settings checks in multi-service
2021-05-13 15:18:42 -04:00

48 lines
1.6 KiB
C#

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<AmazonSesMailDeliveryService> sesLogger,
ILogger<PostalMailDeliveryService> 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);
}
}
}
}