我在MimeKit中添加了对生成和验证 DKIM 签名的完全支持,它是开源的(许可证:MIT),完全免费用于商业用途。
如果您还需要 SMTP、POP3 和/或 IMAP 支持,请查看基于 MimeKit构建的 MailKit。
由于 MimeKit 和 MailKit 不会在每次将它们写入流时生成一组新的边界字符串,因此它们不会遇到使用 System.Net.Mail 和 DKIM.Net[1](不是 DKIM.Net 的错误,要清楚)。
要将 DKIM 签名添加到 MimeKit 中的消息,您可以执行以下操作:
var message = CreateMyMessage ();
var headersToSign = new [] { HeaderId.From, HeaderId.To,
HeaderId.Subject, HeaderId.Date };
var signer = new DkimSigner ("C:\my-dkim-key.pem") {
AgentOrUserIdentifier = "@eng.example.net",
Domain = "example.net",
Selector = "brisbane",
};
message.Sign (signer, headersToSign,
DkimCanonicalizationAlgorithm.Relaxed,
DkimCanonicalizationAlgorithm.Simple);
要使用 MailKit 发送消息,您可以执行以下操作:
using (var client = new SmtpClient ()) {
client.Connect ("smtp.gmail.com", 465, true);
client.Authenticate ("username", "password");
client.Send (message);
client.Disconnect (true);
}
笔记:
- 由于 System.Net.Mail.SmtpClient 为多部分消息(当您有附件或 AlternativeViews 时使用)生成一组新的边界标记,因此您不能使用 DKIM.Net 对所述消息进行签名,因为签名会在您实际使用时中断去发送邮件,因为 MIME 格式的邮件正文将发生变化。