我正在使用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);
}

笔记:
  • 由于System.Net.Mail.SmtpClient为多部分邮件(这是在您具有附件或AlternativeViews时使用的)生成新的边界标记集,因此您无法使用DKIM.Net对该消息进行签名,因为签名会在您使用时中断实际去发送邮件,因为MIME格式的邮件正文已更改。
  • 关于c# - .NET MailMessage和AlternativeViews中的DKIM,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6237780/

    10-09 21:38