加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 07:51:30 所属栏目:百科 来源:网络整理
导读:我在C#中编写了一个发送电子邮件的程序.现在我有一个要求,使用Dominkeys / DKIM签署出站电子邮件,但我不知道该怎么做. 我已经设置了所有的键,但我不知道如何让这些和hwo将它们包括在电子邮件头. 解决方法 尝试使用System.Net.Mail.MailMessage和System.Net.M
我在C#中编写了一个发送电子邮件的程序.现在我有一个要求,使用Dominkeys / DKIM签署出站电子邮件,但我不知道该怎么做.

我已经设置了所有的键,但我不知道如何让这些和hwo将它们包括在电子邮件头.

解决方法

尝试使用System.Net.Mail.MailMessage和System.Net.Mail.SmtpClient执行DKIM签名有一个根本的问题,即为了签署消息,您需要戳出SmtpClient的内部以便将消息体作为生成DKIM-Signature标题的步骤之一.当您有备用视图或附件时,问题出现,因为SmtpClient会在每次写出断开主体散列的消息并因此产生DKIM签名有效性时生成新的多边形边界.

为了解决这个问题,您可以使用MimeKit和MailKit开源库作为使用System.Net.Mail的替代框架.

要在MimeKit中的邮件中添加DKIM签名,您可以执行以下操作:

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",};

// 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 SmtpClient ()) {
    client.Connect ("smtp.gmail.com",465,true);
    client.Authenticate ("username","password");
    client.Send (message);
    client.Disconnect (true);
}

希望有帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读