DKIM 在 vb.net 项目中使用 MimeKit 签署电子邮件

DKIM Signing an email using MimeKit in a vb.net project

我正在使用 MimeKit 发送电子邮件,并且有人提出使用 DKIM 对它们进行签名。我查看了 MimKit 网站上的示例,并用谷歌搜索了条款,但没有找到答案。

Public Shared Sub DkimSign(ByVal message As MimeMessage)
  Dim headers = New HeaderId() {HeaderId.From, HeaderId.Subject, HeaderId.Date}
  Dim headerAlgorithm = DkimCanonicalizationAlgorithm.Simple
  Dim bodyAlgorithm = DkimCanonicalizationAlgorithm.Simple
  Dim signer = New DkimSigner("filename", "domain", "selector") With {.SignatureAlgorithm = DkimSignatureAlgorithm.RsaSha1, .AgentOrUserIdentifier = "@eng.example.com"}

  message.Prepare(EncodingConstraint.SevenBit)
  message.Sign(signer, headers, headerAlgorithm, bodyAlgorithm)

End Sub

实例化签名者时需要文件名、域和选择器。如果我从 "bob@website.com" 发送电子邮件,我会假设物理文件将放置在站点的根目录下,并且实例化看起来像这样:

Dim signer = New DkimSigner("dkim.txt", "website.com", "") With {.SignatureAlgorithm = DkimSignatureAlgorithm.RsaSha1, .AgentOrUserIdentifier = "???"}

但不确定 AgentOrUserIdentifier 的 format/reason ...如果我的假设有误,任何人都可以启发或纠正我吗?

fileName 参数是应该用于对消息进行签名的私钥的路径。我不确定您为什么希望它位于站点的根目录或为什么将其称为 dkim.txt,但我几乎可以保证这两种假设都是错误的。

接收客户端使用 selector 在 DNS 记录中找到正确的 public 密钥,因为同一个域可能有多个用于签名的密钥。

AgentOrUserIdentifier 对应于您在 DKIM-Signature header 中找到的 i= 参数,并指定负责签名的用户或代理人。