64 lines
2.2 KiB
C#
64 lines
2.2 KiB
C#
using Correo.Abstractions;
|
|
using Correo.Abstractions.Extensions;
|
|
using Correo.MailKit.Extensions;
|
|
using Correo.MailKit.Models;
|
|
using MailKit.Net.Smtp;
|
|
using MailKit.Security;
|
|
using Microsoft.Extensions.Logging;
|
|
using Microsoft.Extensions.Options;
|
|
using System;
|
|
using System.Net;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Correo.MailKit
|
|
{
|
|
internal class MailKitSmtpClient : IMailer, IDisposable
|
|
{
|
|
private readonly IOptions<SmtpClientOptions> _optionsAccessor;
|
|
private readonly SmtpClient _smtpClient;
|
|
private readonly ILogger<MailKitSmtpClient> _logger;
|
|
|
|
public MailKitSmtpClient(IOptions<SmtpClientOptions> optionsAccessor, ILogger<MailKitSmtpClient> logger)
|
|
{
|
|
_optionsAccessor = optionsAccessor;
|
|
_logger = logger;
|
|
|
|
var options = _optionsAccessor.Value;
|
|
|
|
_smtpClient = new SmtpClient();
|
|
_smtpClient.Connect(options.Server, options.Port, options.EnableSsl ? SecureSocketOptions.Auto : SecureSocketOptions.None);
|
|
|
|
if (options.UseAuthentication)
|
|
_smtpClient.Authenticate(options.Authentication.UserName, options.Authentication.Password);
|
|
|
|
if (options.TrustServer)
|
|
ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
_smtpClient?.Disconnect(true);
|
|
_smtpClient?.Dispose();
|
|
GC.SuppressFinalize(this);
|
|
}
|
|
|
|
public void SendEmail(EmailMessage message)
|
|
{
|
|
var mailMessage = message.ToMailMessage();
|
|
_smtpClient.Send(mailMessage);
|
|
Log(message);
|
|
}
|
|
|
|
public async Task SendEmailAsync(EmailMessage message, CancellationToken token = default)
|
|
{
|
|
var mailMessage = message.ToMailMessage();
|
|
await _smtpClient.SendAsync(mailMessage, token);
|
|
Log(message);
|
|
}
|
|
|
|
private void Log(EmailMessage message)
|
|
=> _logger.LogInformation($"Email sent: Subject: {message.Subject}; From: {message.From.Address}; To: {message.To.Log()}; Cc: {message.Cc.Log()}; Bcc: {message.Bcc.Log()};");
|
|
}
|
|
}
|