Я реализовал простое приложение командной строки с помощью C#/NET 6, чтобы действовать как фильтр в E-MailRelay:
с помощью System.IO;
используя System.Text;
с помощью MimeKit;
использование MimeKit.Cryptography;
пространство имен E_MailRelay.DKIM.Filter;
/// <сводка>
/// Читает сообщение электронной почты, добавляет жесткую подпись DKIM и записывает
обновленное сообщение обратно на диск
/// Обратите внимание, что для этого требуется установка MailKit.
/// </резюме>
программа внутреннего класса
{
частная константная строка DKIMSelector = "ENTER_YOUR_DKIM_SELECTOR_HERE";
частная константная строка _DKIMDomain = "ENTER_YOUR_DOMAIN_NAME_HERE";
private const string DKIMPrivateKey = "-----НАЧАТЬ ЗАКРЫТЫЙ КЛЮЧ RSA-----\r\n"
+ @"ENTER_YOUR_PRIVATE_KEY_HERE"
+ "\r\n-----КОНЕЦ ЗАКРЫТОГО КЛЮЧА RSA-----";
частный статический int Main (string [] args)
{
LoadSignAndRewriteMail(аргументы);
вернуть 102;
}
private static void LoadSignAndRewriteMail(string[] args)
{
var emailMessage = MimeMessage.Load(args[0]);
если (!emailMessage.Headers.Contains(HeaderId.DkimSignature)
&& !emailMessage.Headers.Contains(HeaderId.DomainKeySignature))
{
SignMail(emailMessage);
}
emailMessage.WriteTo (аргументы [0]);
}
private static void SignMail (MimeMessage emailMessage)
{
var pk = DKIMPrivateKey;
Поток MemoryStream = новый (Кодировка.UTF8.GetBytes (pk));
{
поток.Позиция = 0;
}
var dkimSigner = новый DkimSigner (поток, _DKIMDomain, DKIMSelector);
Заголовок[] dkimSignHeaders =
{
HeaderId.To, HeaderId.Cc, HeaderId.Subject, HeaderId.From, HeaderId.Date, HeaderId.MessageId, HeaderId.Body,
HeaderId.Date, HeaderId.MimeVersion, HeaderId.Sender, HeaderId.ReplyTo, HeaderId.ContentTransferEncoding,
HeaderId.ContentId, HeaderId.ContentDescription, HeaderId.ResentDate, HeaderId.ResentFrom,
HeaderId.ResentSender, HeaderId.ResentTo, HeaderId.ResentCc, HeaderId.ResentMessageId, HeaderId.InReplyTo,
HeaderId.References
};
dkimSigner.Sign(FormatOptions.Default, emailMessage, dkimSignHeaders);
}
}