簡體   English   中英

.NET MailMessage 和 AlternativeViews 中的 DKIM

[英]DKIM in .NET MailMessage and AlternativeViews

我正在使用 DKIM.NET (https://github.com/dmcgiv/DKIM.Net) 對 MailMessage 進行簽名,然后再將其發送給收件人。 我面臨的問題是,上面的組件在我插入內容為 HTML 和 AlternativeViews 形式的純文本時,上面的組件對 MailMessage 的正文 (mailMessage.Body) 進行了簽名。

結果是我的 mailMessage.Body 是 null 但收到的消息正文包含我的替代視圖,因此 DKIM 無法正確驗證。

有沒有辦法解決這個問題? 也許在將它們分配給 MailMessage object 之前簽署 HTML 和純文本替代視圖? 或者也許使用另一個組件?

編輯:

自從我開始這個問題以來,我已經在https://github.com/yannispsarras/DKIM-AlternativeViews創建了一個項目 - 這絕不是完整或穩定的,但我將它發布在這里以防它對任何想要的人有用在 .NET 中找到簽名替代視圖的解決方案。

我在MimeKit中添加了對生成和驗證 DKIM 簽名的完全支持,它是開源的(許可證:MIT),完全免費用於商業用途。

如果您還需要 SMTP、POP3 和/或 IMAP 支持,請查看基於 MimeKit構建的 MailKit。

由於 MimeKit 和 MailKit 不會在每次將它們寫入 stream 時生成一組新的邊界字符串,因此它們不會遇到使用 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);
}

筆記:

  1. 由於 System.Net.Mail.SmtpClient 為多部分消息(當您有附件或 AlternativeViews 時使用)生成一組新的邊界標記,因此您不能使用 DKIM.Net 對所述消息進行簽名,因為簽名會在您實際中斷時中斷go 發送消息,因為 MIME 格式的消息正文將發生變化。

您可以嘗試Mail.dll email 組件它支持 DKIM,兩者:簽名和驗證:

http://www.limilabs.com/blog/sign-emails-with-dkim

該組件不是免費的,但請注意我寫的。

我已經更新了 DKIM.Net 網站上的自述文件來解釋這個限制。 這基本上是由於 System.Net.Mail.SmtpClient 生成邊界以分隔替代視圖或附件的方式 - 它們是新的 Guid,因此每次發送消息時邊界 id 都會更改 - 如果內容發生更改,則簽名失敗。 該代碼通過使用虛擬 stream 發送 MailMessage 來破解 SmptClient 以獲取 email 的全部內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM