From fb1b7b35abde4576a42c316cc9d11e609b4734fe Mon Sep 17 00:00:00 2001 From: Luca Santangelo Date: Tue, 16 Aug 2022 16:27:50 +0200 Subject: [PATCH 1/3] Added a new option in SmtpClientOptions to support a ServerCertificateValidationCallback per client --- src/Senders/FluentEmail.MailKit/MailKitSender.cs | 11 +++++++++++ src/Senders/FluentEmail.MailKit/SmtpClientOptions.cs | 2 ++ 2 files changed, 13 insertions(+) diff --git a/src/Senders/FluentEmail.MailKit/MailKitSender.cs b/src/Senders/FluentEmail.MailKit/MailKitSender.cs index 8a5d1413..e45a879d 100644 --- a/src/Senders/FluentEmail.MailKit/MailKitSender.cs +++ b/src/Senders/FluentEmail.MailKit/MailKitSender.cs @@ -5,6 +5,7 @@ using MimeKit; using System; using System.IO; +using System.Net.Security; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -54,6 +55,11 @@ public SendResponse Send(IFluentEmail email, CancellationToken? token = null) using (var client = new SmtpClient()) { + if(_smtpClientOptions.ServerCertificateValidationCallback is not null) + { + client.ServerCertificateValidationCallback = _smtpClientOptions.ServerCertificateValidationCallback; + } + if (_smtpClientOptions.SocketOptions.HasValue) { client.Connect( @@ -116,6 +122,11 @@ public async Task SendAsync(IFluentEmail email, CancellationToken? using (var client = new SmtpClient()) { + if (_smtpClientOptions.ServerCertificateValidationCallback is not null) + { + client.ServerCertificateValidationCallback = _smtpClientOptions.ServerCertificateValidationCallback; + } + if (_smtpClientOptions.SocketOptions.HasValue) { await client.ConnectAsync( diff --git a/src/Senders/FluentEmail.MailKit/SmtpClientOptions.cs b/src/Senders/FluentEmail.MailKit/SmtpClientOptions.cs index fa21953a..2b06a6b8 100644 --- a/src/Senders/FluentEmail.MailKit/SmtpClientOptions.cs +++ b/src/Senders/FluentEmail.MailKit/SmtpClientOptions.cs @@ -1,4 +1,5 @@ using MailKit.Security; +using System.Net.Security; namespace FluentEmail.MailKitSmtp { @@ -14,5 +15,6 @@ public class SmtpClientOptions public bool UsePickupDirectory { get; set; } = false; public string MailPickupDirectory { get; set; } = string.Empty; public SecureSocketOptions? SocketOptions { get; set; } + public RemoteCertificateValidationCallback ServerCertificateValidationCallback { get; set; } } } From f35c8bc6e87127de368bf51302555df3c606419d Mon Sep 17 00:00:00 2001 From: Luca Santangelo Date: Tue, 16 Aug 2022 16:33:33 +0200 Subject: [PATCH 2/3] changed 'is not null' to ' != null' for any compatibility issues --- src/Senders/FluentEmail.MailKit/MailKitSender.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Senders/FluentEmail.MailKit/MailKitSender.cs b/src/Senders/FluentEmail.MailKit/MailKitSender.cs index e45a879d..f2e1ab1d 100644 --- a/src/Senders/FluentEmail.MailKit/MailKitSender.cs +++ b/src/Senders/FluentEmail.MailKit/MailKitSender.cs @@ -55,7 +55,7 @@ public SendResponse Send(IFluentEmail email, CancellationToken? token = null) using (var client = new SmtpClient()) { - if(_smtpClientOptions.ServerCertificateValidationCallback is not null) + if(_smtpClientOptions.ServerCertificateValidationCallback != null) { client.ServerCertificateValidationCallback = _smtpClientOptions.ServerCertificateValidationCallback; } @@ -122,7 +122,7 @@ public async Task SendAsync(IFluentEmail email, CancellationToken? using (var client = new SmtpClient()) { - if (_smtpClientOptions.ServerCertificateValidationCallback is not null) + if (_smtpClientOptions.ServerCertificateValidationCallback != null) { client.ServerCertificateValidationCallback = _smtpClientOptions.ServerCertificateValidationCallback; } From d2f1d04c3f0e1b75c40007d47662f7f631286f16 Mon Sep 17 00:00:00 2001 From: Whivel Date: Mon, 25 Mar 2024 08:57:21 +0100 Subject: [PATCH 3/3] Added CheckCertificateRevocation on SmtClientOptions --- src/Senders/FluentEmail.MailKit/MailKitSender.cs | 2 ++ src/Senders/FluentEmail.MailKit/SmtpClientOptions.cs | 1 + 2 files changed, 3 insertions(+) diff --git a/src/Senders/FluentEmail.MailKit/MailKitSender.cs b/src/Senders/FluentEmail.MailKit/MailKitSender.cs index f2e1ab1d..c0b8a3f7 100644 --- a/src/Senders/FluentEmail.MailKit/MailKitSender.cs +++ b/src/Senders/FluentEmail.MailKit/MailKitSender.cs @@ -55,6 +55,7 @@ public SendResponse Send(IFluentEmail email, CancellationToken? token = null) using (var client = new SmtpClient()) { + client.CheckCertificateRevocation = _smtpClientOptions.CheckCertificateRevocation; if(_smtpClientOptions.ServerCertificateValidationCallback != null) { client.ServerCertificateValidationCallback = _smtpClientOptions.ServerCertificateValidationCallback; @@ -122,6 +123,7 @@ public async Task SendAsync(IFluentEmail email, CancellationToken? using (var client = new SmtpClient()) { + client.CheckCertificateRevocation = _smtpClientOptions.CheckCertificateRevocation; if (_smtpClientOptions.ServerCertificateValidationCallback != null) { client.ServerCertificateValidationCallback = _smtpClientOptions.ServerCertificateValidationCallback; diff --git a/src/Senders/FluentEmail.MailKit/SmtpClientOptions.cs b/src/Senders/FluentEmail.MailKit/SmtpClientOptions.cs index 2b06a6b8..05c783a5 100644 --- a/src/Senders/FluentEmail.MailKit/SmtpClientOptions.cs +++ b/src/Senders/FluentEmail.MailKit/SmtpClientOptions.cs @@ -15,6 +15,7 @@ public class SmtpClientOptions public bool UsePickupDirectory { get; set; } = false; public string MailPickupDirectory { get; set; } = string.Empty; public SecureSocketOptions? SocketOptions { get; set; } + public bool CheckCertificateRevocation { get; set; } = true; public RemoteCertificateValidationCallback ServerCertificateValidationCallback { get; set; } } }