如何使用C#SMTP客户端进行Domainkeys/DKIM电子邮件签名?

Nnp*_*Nnp 15 c# email smtp domainkeys dkim

我用C#编写了一个发送电子邮件的程序.现在我需要使用Dominkeys/DKIM签署出站电子邮件,但我不知道该怎么做.

我已经设置了所有密钥,但我不知道如何将它们和hwo包含在电子邮件标题中.

jst*_*ast 14

尝试使用System.Net.Mail.MailMessage和System.Net.Mail.SmtpClient进行DKIM签名存在一个根本问题,为了对消息进行签名,您需要戳一下SmtpClient的内部以便散列消息正文作为生成DKIM-Signature标头的步骤之一.当您有其他视图或附件时会出现问题,因为SmtpClient每次写出破坏正文哈希的消息时都会生成新的多部分边界,从而产生DKIM签名有效性.

要解决此问题,您可以使用.NET 的MimeKitMailKit开源库作为使用System.Net.Mail的替代框架.

要在MimeKit中为消息添加DKIM签名,您可以执行以下操作:

MimeMessage message = MimeMessage.CreateFromMailMessage(mailMessage);
HeaderId[] headersToSign =  new HeaderId[] { HeaderId.From, HeaderId.Subject, HeaderId.Date };

string domain = "example.net";
string selector = "brisbane";

DkimSigner signer = new DkimSigner ("C:\my-dkim-key.pem", domain, selector) 
{
   SignatureAlgorithm = DkimSignatureAlgorithm.RsaSha1,
   AgentOrUserIdentifier = "@eng.example.com",
   QueryMethod = "dns/txt",      
};

// Prepare the message body to be sent over a 7bit transport (such as 
// older versions of SMTP). This is VERY important because the message
// cannot be modified once we DKIM-sign our message!
//
// Note: If the SMTP server you will be sending the message over 
// supports the 8BITMIME extension, then you can use
// `EncodingConstraint.EightBit` instead.
message.Prepare (EncodingConstraint.SevenBit);

message.Sign (signer, headersToSign, 
    DkimCanonicalizationAlgorithm.Relaxed, 
    DkimCanonicalizationAlgorithm.Simple);
Run Code Online (Sandbox Code Playgroud)

要使用MailKit发送消息,您可以执行以下操作:

using (var client = new MailKit.Net.Smtp.SmtpClient ()) {
    client.Connect ("smtp.gmail.com", 465, true);
    client.Authenticate ("username", "password");
    client.Send (message);
    client.Disconnect (true);
}
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.


Dam*_*ern 6

请参阅https://github.com/dmcgiv/DKIM.Net,它是用C#编写的.Net的DomainKeys Identified Mail(DKIM)实现 - 它使您能够签署MailMessage对象.


Nnp*_*Nnp -1

我在这个问题上没有找到太多帮助,但我的问题通过配置 smtp 服务器得到了解决。我无法发布这些步骤,因为我使用的是第 3 方 smtp 服务器,并且每个服务器都有自己的配置。正确配置后,我的 smtp 自动添加 DM/DKIM 签名。