我正在使用DKIM.NET(https://github.com/dmcgiv/DKIM.Net)对MailMessage进行签名,然后再将其发送给收件人。我面临的问题是,当我以AlternativeViews形式同时以HTML和纯文本形式插入内容时,上面的组件在MailMessage的主体(mailMessage.Body)上签名。
结果是我的mailMessage.Body为null,但是接收到的消息正文包含我的替代 View ,因此DKIM无法正确验证。
有什么办法可以解决这个问题?也许在将HTML和纯文本替代 View 分配给MailMessage对象之前对其进行签名?还是使用其他组件?
编辑:
自从我开始这个问题以来,我已经在https://github.com/yannispsarras/DKIM-AlternativeViews创建了一个项目-这绝不是完整的或稳定的,但是我将其发布在这里,以防万一它对寻求在.NET中为签名的替代 View 找到解决方案的人有用。
最佳答案
我已经添加了对在MimeKit中生成和验证DKIM签名的完全支持,该文件是开源的(许可证:MIT),完全免费用于商业用途。
如果您还需要SMTP,POP3和/或IMAP支持,请 checkout 基于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);
}
笔记:
关于c# - .NET MailMessage和AlternativeViews中的DKIM,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6237780/