Am implementat o aplicație simplă de linie de comandă cu C# / NET 6 pentru a acționa ca un filtru în E-MailRelay:
folosind System.IO;
folosind System.Text;
folosind MimeKit;
folosind MimeKit.Cryptography;
spatiu de nume E_MailRelay.DKIM.Filter;
/// <rezumat>
/// Citește un mesaj de e-mail, adaugă o semnătură DKIM Hardcoded și și scrie
mesajul actualizat înapoi pe disc
/// Rețineți că acest lucru necesită instalarea MailKit pentru a funcționa.
/// </rezumat>
Programul clasei interne
{
private const string DKIMSelector = "ENTER_YOUR_DKIM_SELECTOR_HERE";
private const string _DKIMDomain = "INTRODUCEȚI_DOMENIUL_TĂU_NUMELE_AICI";
private const string DKIMPrivateKey = "-----BEGIN RSA PRIVATE KEY-----\r\n"
+ @„ENTER_YOUR_PRIVATE_KEY_HERE”
+ "\r\n-----END RSA PRIVATE KEY-----";
private static int Main(șir[] argumente)
{
LoadSignAndRewriteMail(args);
întoarcere 102;
}
private static void LoadSignAndRewriteMail(string[] args)
{
var emailMessage = MimeMessage.Load(args[0]);
dacă (!emailMessage.Headers.Contains(HeaderId.DkimSignature)
&& !emailMessage.Headers.Contains(HeaderId.DomainKeySignature))
{
SignMail(emailMessage);
}
emailMessage.WriteTo(args[0]);
}
private static void SignMail(MimeMessage emailMessage)
{
var pk = DKIMPrivateKey;
Flux MemoryStream = new(Encoding.UTF8.GetBytes(pk));
{
stream.Poziție = 0;
}
var dkimSigner = new DkimSigner(stream, _DKIMDomain, DKIMSelector);
HeaderId[] 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);
}
}