我用C#编写了一个发送电子邮件的程序。现在我需要使用Dominkeys / DKIM签署出站电子邮件,但我不知道该怎么做。
我已经设置了所有密钥,但我不知道如何让它们和hwo将它们包含在电子邮件标题中。
答案 0 :(得分:14)
尝试使用System.Net.Mail.MailMessage和System.Net.Mail.SmtpClient进行DKIM签名存在一个根本问题,为了对邮件进行签名,您需要按顺序查看SmtpClient的内部结构将消息体散列为生成DKIM-Signature标头的步骤之一。当您有其他视图或附件时会出现问题,因为SmtpClient每次写出破坏正文哈希值的消息时都会生成新的多部分边界,从而产生DKIM签名的有效性。
要解决此问题,您可以使用.NET的MimeKit和MailKit开源库作为使用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);
要使用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);
}
希望有所帮助。
答案 1 :(得分:6)
请参阅https://github.com/dmcgiv/DKIM.Net这是用C#编写的.Net的DomainKeys Identified Mail(DKIM)实现 - 它使您能够签署MailMessage对象。
答案 2 :(得分:2)
我也想知道 我只是找到一个dkim工具,但我不能运行成功-_- http://tinisles.blogspot.com/2009/09/sending-dkim-email-from-c.html
答案 3 :(得分:2)
它不仅允许使用DKIM进行签名,还可以包含S / MIME证书,PGP证书等。 此外,它是一个非常成熟的lib - 我发现只有正确处理外语(除英语之外)的文章,因为它完全彻底地用unicode编码。
它的免费和开源。
答案 4 :(得分:1)
如果您希望DKIM签署MailMessage的正文,那么DKIM.NET很棒。如果您希望在您的消息中有其他观点,那么我无法找到解决方案并编写了我自己的(开放源码与通常的免责声明),可以在https://github.com/yannispsarras/DKIM-AlternativeViews找到
我知道这是一个非常古老的帖子,但我认为这可能有助于某人。
答案 5 :(得分:0)
我在这个问题上找不到多少帮助,但我的问题通过配置smtp服务器得到了解决。 我不能发布这些步骤,因为我正在使用第三方smtp服务器,每个服务器都有自己的配置。正确配置后,我的smtp会自动添加DM / DKIM签名。
答案 6 :(得分:0)
使用Mailenable作为SMTP中继服务器时,这为我解决了这个问题。
http://www.mailenable.com/kb/content/article.asp?ID=ME020700
在域名上创建DKIM TXT记录时,请不要忘记使用活动选择器作为前缀=> yourselector._domainkey.yourdomainname.be