using MailKit.Net.Smtp; using MailKit.Security; using Microsoft.Extensions.Options; using MimeKit; using SchotzIadKmTracker.Api.Configuration; namespace SchotzIadKmTracker.Api.Services; /// /// Implémentation de reposant sur MailKit pour /// l'envoi d'emails via un serveur SMTP. La configuration (hôte, port, /// identifiants, expéditeur) provient de . Cette /// implémentation est enregistrée en DI lorsque Smtp:Host est renseigné. /// public class SmtpEmailService : IEmailService { private readonly SmtpOptions _options; private readonly ILogger _logger; public SmtpEmailService(IOptions options, ILogger logger) { _options = options.Value; _logger = logger; } /// public async Task EnvoyerLienResetAsync(string destinataire, string lienReset, CancellationToken ct) { var message = new MimeMessage(); message.From.Add(MailboxAddress.Parse(_options.From)); message.To.Add(MailboxAddress.Parse(destinataire)); message.Subject = "Réinitialisation de votre mot de passe"; var corps = new BodyBuilder { TextBody = "Bonjour,\r\n\r\n" + "Vous avez demandé la réinitialisation de votre mot de passe.\r\n" + "Cliquez sur le lien suivant pour définir un nouveau mot de passe :\r\n\r\n" + lienReset + "\r\n\r\n" + "Si vous n'êtes pas à l'origine de cette demande, ignorez cet email.", HtmlBody = "

Bonjour,

" + "

Vous avez demandé la réinitialisation de votre mot de passe.

" + "

Cliquez sur le lien suivant pour définir un nouveau mot de passe :

" + $"

{lienReset}

" + "

Si vous n'êtes pas à l'origine de cette demande, ignorez cet email.

" }; message.Body = corps.ToMessageBody(); using var client = new SmtpClient(); _logger.LogInformation( "Envoi de l'email de réinitialisation à {Destinataire} via {Host}:{Port}.", destinataire, _options.Host, _options.Port); await client.ConnectAsync(_options.Host, _options.Port, SecureSocketOptions.StartTls, ct); if (!string.IsNullOrEmpty(_options.User)) { await client.AuthenticateAsync(_options.User, _options.Password, ct); } await client.SendAsync(message, ct); await client.DisconnectAsync(true, ct); _logger.LogInformation( "Email de réinitialisation envoyé à {Destinataire}.", destinataire); } }