diff --git a/src/Senders/FluentEmail.MailKit/MailKitSender.cs b/src/Senders/FluentEmail.MailKit/MailKitSender.cs
index 8a5d1413..f1ab2a2e 100644
--- a/src/Senders/FluentEmail.MailKit/MailKitSender.cs
+++ b/src/Senders/FluentEmail.MailKit/MailKitSender.cs
@@ -181,11 +181,13 @@ private async Task SaveToPickupDirectory(MimeMessage message, string pickupDirec
}
///
- /// Create a MimMessage so MailKit can send it
+ /// Create a MimeMessage so MailKit can send it.
+ /// Virtual so subclasses can preprocess the message before sending
+ /// (e.g. DKIM-sign it) — see https://github.com/lukencode/FluentEmail/issues/388
///
/// The mail message.
/// Email data.
- private MimeMessage CreateMailMessage(IFluentEmail email)
+ protected virtual MimeMessage CreateMailMessage(IFluentEmail email)
{
var data = email.Data;
diff --git a/test/FluentEmail.Core.Tests/MailKitSmtpSenderTests.cs b/test/FluentEmail.Core.Tests/MailKitSmtpSenderTests.cs
index 7b80921b..2b8f066e 100644
--- a/test/FluentEmail.Core.Tests/MailKitSmtpSenderTests.cs
+++ b/test/FluentEmail.Core.Tests/MailKitSmtpSenderTests.cs
@@ -1,7 +1,10 @@
using System.IO;
+using System.Linq;
using System.Threading.Tasks;
using FluentEmail.Core;
+using FluentEmail.Core.Interfaces;
using FluentEmail.MailKitSmtp;
+using MimeKit;
using NUnit.Framework;
using Attachment = FluentEmail.Core.Models.Attachment;
@@ -119,5 +122,50 @@ public void CanSendHtmlAndPlaintextTogether()
Assert.IsTrue(response.Successful);
}
+
+ [Test]
+ public void CanPreprocessMessageByOverridingCreateMailMessage()
+ {
+ var sender = new PreprocessingMailKitSender(new SmtpClientOptions
+ {
+ Server = "localhost",
+ Port = 25,
+ UseSsl = false,
+ RequiresAuthentication = false,
+ UsePickupDirectory = true,
+ MailPickupDirectory = tempDirectory
+ });
+ Email.DefaultSender = sender;
+
+ var email = Email
+ .From(fromEmail)
+ .To(toEmail)
+ .Subject(subject)
+ .Body(body);
+
+ var response = email.Send();
+
+ Assert.IsTrue(response.Successful);
+ var eml = Directory.EnumerateFiles(tempDirectory, "*.eml").First();
+ var content = File.ReadAllText(eml);
+ Assert.IsTrue(content.Contains("X-Preprocessed: yes"),
+ "Override of CreateMailMessage should be able to modify the message before sending.");
+ }
+
+ ///
+ /// Simulates e.g. DKIM-signing: preprocess the MimeMessage after creation.
+ /// Possible since CreateMailMessage is protected virtual (issue #388).
+ ///
+ private class PreprocessingMailKitSender : MailKitSender
+ {
+ public PreprocessingMailKitSender(SmtpClientOptions options) : base(options) { }
+
+ protected override MimeMessage CreateMailMessage(IFluentEmail email)
+ {
+ var message = base.CreateMailMessage(email);
+ message.Headers.Add("X-Preprocessed", "yes");
+ return message;
+ }
+ }
}
}