using System.Collections.Generic;
using System.Security.Cryptography;
static void Main(string[] args)
var message = new MimeMessage();
message.From.Add(new MailboxAddress("Sender Name", "sender@example.com"));
message.To.Add(new MailboxAddress("Recipient Name", "recipient@example.com"));
message.Subject = "Double DKIM Signed Email Test";
message.Date = DateTimeOffset.Now;
message.Body = new TextPart("plain")
Text = "This is a test email with double DKIM signing."
string privateKeyPem = File.ReadAllText("private_key.pem");
rsa.ImportFromPem(privateKeyPem);
var headersToSign = new HashSet<string> { "From", "To", "Subject", "Date" };
var sendingDomainSigner = new DkimSigner(rsa, "example.com", "selector1")
HeaderCanonicalizationAlgorithm = DkimCanonicalizationAlgorithm.Relaxed,
BodyCanonicalizationAlgorithm = DkimCanonicalizationAlgorithm.Simple,
AgentOrUserIdentifier = "@example.com",
SignatureAlgorithm = DkimSignatureAlgorithm.RsaSha256,
sendingDomainSigner.Sign(message);
var serverDomainSigner = new DkimSigner(rsa, "mailserver.com", "selector2")
HeaderCanonicalizationAlgorithm = DkimCanonicalizationAlgorithm.Relaxed,
BodyCanonicalizationAlgorithm = DkimCanonicalizationAlgorithm.Simple,
AgentOrUserIdentifier = "@mailserver.com",
SignatureAlgorithm = DkimSignatureAlgorithm.RsaSha256,
serverDomainSigner.Sign(message);
using (var client = new SmtpClient())
client.Connect("smtp.example.com", 587, SecureSocketOptions.StartTls);
client.Authenticate("username", "password");
Console.WriteLine("Email sent successfully with double DKIM signing, including key headers.");