Tôi đã triển khai một ứng dụng dòng lệnh đơn giản với C#/NET 6 để hoạt động như một bộ lọc trong E-MailRelay:
sử dụng System.IO;
sử dụng System.Text;
sử dụng MimeKit;
sử dụng MimeKit.Cryptography;
không gian tên E_MailRelay.DKIM.Filter;
/// <tóm tắt>
/// Đọc một tin nhắn e-mail, thêm chữ ký DKIM được mã hóa cứng và viết
tin nhắn cập nhật trở lại đĩa
/// Lưu ý rằng điều này yêu cầu cài đặt MailKit để hoạt động.
/// </tóm tắt>
chương trình lớp nội bộ
{
private const string DKIMSelector = "ENTER_YOUR_DKIM_SELECTOR_HERE";
chuỗi const riêng tư _DKIMDomain = "ENTER_YOUR_DOMAIN_NAME_HERE";
private const string DKIMprivateKey = "----- BEGIN RSA PRIVATE KEY -----\r\n"
+ @"ENTER_YOUR_PRIVATE_KEY_HERE"
+ "\r\n------KẾT THÚC KHÓA RSA RSA-----";
tĩnh riêng int Chính (chuỗi [] args)
{
LoadSignAndRewriteMail(args);
trả về 102;
}
private tĩnh void LoadSignAndRewriteMail(string[] args)
{
var emailMessage = MimeMessage.Load(args[0]);
nếu (!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;
Luồng MemoryStream = new(Encoding.UTF8.GetBytes(pk));
{
luồng. Vị trí = 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.ContentDes mô tả, HeaderId.ResentDate, HeaderId.ResentFrom,
HeaderId.ResentSender, HeaderId.ResentTo, HeaderId.ResentCc, HeaderId.ResentMessageId, HeaderId.InReplyTo,
HeaderId.References
};
dkimSigner.Sign(FormatOptions.Default, emailMessage, dkimSignHeaders);
}
}