feat(infrastructure): Add Limilabs email service and RabbitMQ email queue

- Add LimilabsEmailService for SMTP operations (IEmailService implementation)
- Add RabbitMqEmailQueue for production email queue (RabbitMQ-based)
- Update InMemoryEmailQueue for improved error handling
- Update IEmailQueue interface for RabbitMQ compatibility
- Update DependencyInjection.cs:
  * Switch IEmailService to LimilabsEmailService (Singleton)
  * Switch IEmailQueue to RabbitMqEmailQueue (Singleton)
  * Change IEncryptionService to Singleton (thread-safe)
  * Remove IDmsService registration
- Add required NuGet package references to .csproj

TODO: Add Limilabs.Mail NuGet package (commercial license required)
This commit is contained in:
2026-07-22 11:48:37 +02:00
parent dbd0d35ba3
commit 3f9bfc78a8
6 changed files with 402 additions and 22 deletions

View File

@@ -1,10 +1,7 @@
using DigitalData.EmailProfiler.Application.Common.Interfaces;
using DigitalData.EmailProfiler.Infrastructure.Messaging;
using DigitalData.EmailProfiler.Infrastructure.Persistence;
using DigitalData.EmailProfiler.Infrastructure.Queue;
using DigitalData.EmailProfiler.Infrastructure.Repositories;
using DigitalData.EmailProfiler.Infrastructure.Services;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
@@ -22,30 +19,18 @@ public static class DependencyInjection
this IServiceCollection services,
IConfiguration configuration)
{
// --- Database Context ---
services.AddDbContext<EmailProfilerDbContext>(options =>
options.UseSqlServer(
configuration.GetConnectionString("DefaultConnection"),
sqlOptions => sqlOptions.EnableRetryOnFailure()));
// --- Generic Repository ---
services.AddScoped(typeof(IRepository<>), typeof(Repository<>));
// --- External Services ---
// Email Service (using MailKit/MimeKit with OAuth2)
services.AddScoped<IEmailService, MailKitEmailService>();
// Email Service (using Limilabs Mail.dll - Singleton for use in EmailSenderWorker)
services.AddSingleton<IEmailService, LimilabsEmailService>();
// PDF Processing Service (using DevExpress.Pdf)
services.AddScoped<IPdfProcessingService, DevExpressPdfProcessingService>();
// DMS Service (using windream COM Interop)
services.AddScoped<IDmsService, WindreamDmsService>();
// Encryption Service (using Data Protection API)
services.AddScoped<IEncryptionService, DataProtectionEncryptionService>();
// Encryption Service (using Data Protection API - Singleton, thread-safe)
services.AddSingleton<IEncryptionService, DataProtectionEncryptionService>();
// --- Email Queue ---
services.AddSingleton<IEmailQueue, InMemoryEmailQueue>();
// --- Email Queue (RabbitMQ) ---
services.AddSingleton<IEmailQueue, RabbitMqEmailQueue>();
// --- RabbitMQ Configuration ---
services.Configure<RabbitMqConfiguration>(