2023年1月18日 星期三

[研究]MailKit, MimeKit, MailKitLite, MimeKitLite 差異比較

[研究]MailKit, MimeKit, MailKitLite, MimeKitLite 差異比較

2023-01-18

MailKit 和 MimeKit 是兩個.NET平台上用於處理電子郵件的開源庫。

MailKit是一個功能強大的郵件客戶端庫,它提供了一個高級API,可以方便地與各種電子郵件協議(如SMTP、POP3、IMAP)進行交互。 MailKit還提供了對S/MIME和PGP加密的支持,可以用於對電子郵件進行加密和解密。

MimeKit則是一個專注於郵件消息解析和生成的庫,它可以方便地解析和生成各種郵件消息格式,如MIME和S/MIME消息。 MimeKit也支持對PGP加密的解析和生成。

MailKitLite和MimeKitLite是MailKit和MimeKit的輕量級版本,它們針對某些特定場景進行了優化和簡化,以減少庫的大小和複雜度。

總體而言,MailKit和MimeKit提供了一個完整而強大的郵件處理解決方案,可以滿足各種不同的需求,包括處理電子郵件協議、加密和解密電子郵件、解析和生成郵件消息等等。而MailKitLite和MimeKitLite則提供了一個較為輕量級的解決方案,適用於那些對庫的大小和複雜度有限制的場景。

4者官方網站都是
http://www.mimekit.net/

MailKit 3.4.3 和 MailKitLite 3.4.3
支援.NET 6.0 .NET Standard 2.0 .NET Framework 4.6.2
MailKit is an Open Source cross-platform .NET mail-client library that is based on MimeKit and optimized for mobile devices.
https://www.nuget.org/packages/MailKit
https://www.nuget.org/packages/MailKitLite/

MimeKit 3.4.3 和 MimeKitLite 3.4.3
支援.NET 6.0 .NET Standard 2.0 .NET Framework 4.6.2
MimeKit is an Open Source library for creating and parsing MIME, S/MIME and PGP messages on desktop and mobile platforms.
https://www.nuget.org/packages/MimeKit
https://www.nuget.org/packages/MimeKitLite

差異

https://github.com/jstedfast/MimeKit
MimeKit.sln Removed Mono.Data.Sqlite
MimeKitLite.sln Dropped the Net45-specific projects/solutions

https://github.com/jstedfast/MimeKit/blob/master/README.md
MimeKit.sln - includes projects for .NET 4.5/4.6/4.7/4.8, .NETStandard 1.3/1.6/2.0 as well as the unit tests.
MimeKitLite.sln - includes projects for the stripped-down versions of MimeKit that drop support for crypto.
MimeKit.sln - 包括 .NET 4.5/4.6/4.7/4.8、.NETStandard 1.3/1.6/2.0 的項目以及單元測試。
MimeKitLite.sln - 包括 MimeKit 的精簡版本的項目,它放棄了對加密的支持。

********************************************************************************

Visual Studio 2022 NuGet 安裝 MailKit 3.4.3 要求

Portable.BouncyCastle.1.9.0

System.Buffers.4.5.1

System.Numerics.Vectors.4.5.0

System.Runtime.CompilerServices.Unsafe.6.0.0

System.Memory.4.5.5

MimeKit.3.4.3

********************************************************************************

Visual Studio 2022 NuGet 安裝 MailKitLite 3.4.3 要求

System.Buffers.4.5.1

System.Numerics.Vectors.4.5.0

System.Runtime.CompilerServices.Unsafe.6.0.0

System.Memory.4.5.5

MimeKitLite.3.4.3

********************************************************************************

使用 MailKitLite 3.43 和 MimeKitLite 3.43 情況

using MailKit.Net.Smtp;	// 錯誤:找不到類型或命名空間名稱 'MailKit'
using MailKit.Scurity;	// 錯誤:找不到類型或命名空間名稱 'MailKit'

using MailKitLite.Net.Smtp;	// 錯誤:找不到類型或命名空間名稱 'MailKitLite'	
using MailKit.Security;		// 錯誤:找不到類型或命名空間名稱 'MailKitLite'

using MimeKit;
using MimeKit.Cryptography;
using MimeKit.Utils;

using MimeKitLite;		// 錯誤:找不到類型或命名空間名稱 'MimeKitLite'
using MimeKitLite.Cryptography;	// 錯誤:找不到類型或命名空間名稱 'MimeKitLite'
using MimeKitLite.Utils;	// 錯誤:找不到類型或命名空間名稱 'MimeKitLite'

編譯會出錯

CS0234 命名空間 'MimeKit.Cryptography' 中沒有類型或命名空間名稱 'TemporarySecureMimeContext' 

CS0103 名稱 'MultipartSigned' 不存在於目前的內容

using (var ctx = new MimeKit.Cryptography.TemporarySecureMimeContext())
                {
                    // Note: this assumes that the Sender address has an S/MIME signing certificate
                    // and private key with an X.509 Subject Email identifier that matches the
                    // sender's email address.
                    var ctxsender = message.From.Mailboxes.FirstOrDefault();

                    CmsSigner signer = new CmsSigner(signCert);
                    message.Body = MultipartSigned.Create(ctx, signer, message.Body);

                    // MimeKit.Cryptography.CertificateNotFoundException
                    // A valid signing certificate could not be found.
                    //message.Body = MultipartSigned.Create(ctx, ctxsender, DigestAlgorithm.Sha1, message.Body);
                }


下面會出現錯誤

命名空間 'MimeKit.Cryptography' 中沒有類型或命名空間名稱 'SecureMailboxAddress'

MimeKit.Cryptography.SecureMailboxAddress mailbox = new MimeKit.Cryptography.SecureMailboxAddress(
                    System.Text.Encoding.GetEncoding("UTF-8"),
                    "信箱",
                    new List<string>(),
                    "帳號@abcdef.com.tw",
                    ""
                );

下面會出現錯誤

using (var client = new MailKitLite.Net.Smtp.SmtpClient
            {
                ServerCertificateValidationCallback = (s, c, h, ee) => true
            })

下面會出現錯誤

using (var client = new MailKit.Net.Smtp.SmtpClient
            {
                ServerCertificateValidationCallback = (s, c, h, ee) => true
            })

下面會出現錯誤

CS0117 'SmtpClient' 未包含 'ServerCertificateValidationCallback' 的定義
using (var client = new SmtpClient
            {
                ServerCertificateValidationCallback = (s, c, h, ee) => true
            })


(完)


相關

[研究][C#][ASP.NET] 自動加簽或不加簽寄信(使用 MailKit 和 MimeKit)(六)附件改良https://shaurong.blogspot.com/2023/01/caspnet-mailkit-mimekit.html

[研究][C#][ASP.NET] 自動加簽或不加簽寄信(使用 MailKit 和 MimeKit)(五)多收件者與多附件

[研究][C#][ASP.NET] 加簽寄信(使用 MailKit 和 MimeKit)(四)多收件者與多附件
https://shaurong.blogspot.com/2022/06/caspnet-mailkit-mimekit_13.html

[研究][C#][ASP.NET] 加簽寄信(使用 MailKit 和 MimeKit)(三)多收件者與單一附件
https://shaurong.blogspot.com/2022/06/caspnet-mailkit-mimekit_12.html

[研究][ASP.NET]加簽寄信-Windows Server 2019 IIS 10.0 抓 Key Store 中Email憑證所需的權限設定

[研究][C#][ASP.NET] 加簽寄信(使用 MailKit 和 MimeKit)(二)單一收件者、副本、密件
https://shaurong.blogspot.com/2022/06/caspnet-mailkit-mimekit.html

[研究][C#][ASP.NET] 加簽寄信 (使用 MailKit 和 MimeKit)
https://shaurong.blogspot.com/2019/10/caspnet-mailkit-mimekit_13.html

[研究][C#][ASP.NET] 寄信 (使用 MailKit 和 MimeKit)
https://shaurong.blogspot.com/2019/10/caspnet-mailkit-mimekit_11.html

[研究][C#][ASP.NET] 加簽寄信 (使用 System.Net.Mail.MailMessage)
https://shaurong.blogspot.com/2019/10/caspnet-systemnetmailmailmessage.html
更新補充一些資訊,更新到 2021-11-29

[研究][ASP.NET]單一或多個 Email 格式驗證 (使用C#)

[研究]單一或多個 Email 格式驗證 (使用 HTML5)

[研究][ASP.NET]加簽寄信-值不能為 null。參數名稱: findValue

mimekit - 在MimeKit上,簽名和加密
http://hant.ask.helplib.com/mimekit/post_4274560

MailKit Documentation - Creating messages
http://www.mimekit.net/docs/html/Creating-Messages.htm
有簡單寄信範例 (但沒有加簽)

MailKit Documentation - Digitally Signing Messages using S/MIME
http://www.mimekit.net/docs/html/Working-With-SMime.htm#Sign

.NET Framework 中過時的類型
https://docs.microsoft.com/zh-tw/dotnet/framework/whats-new/obsolete-types
System.Web.Mail.SmtpMail 過時,建議的替代做法是 System.Net.Mail.SmtpClient。

System.Net.Mail.SmtpClient
https://docs.microsoft.com/zh-tw/dotnet/api/system.net.mail.smtpclient?view=netframework-4.8
System.Net.Mail.SmtpClient 淘汰,建議改用 https://github.com/jstedfast/MailKit 和 https://github.com/jstedfast/MimeKit

GitHub - jstedfast/MailKit: A cross-platform .NET library for IMAP, POP3, and SMTP.
https://github.com/jstedfast/MailKit

GitHub - jstedfast/MimeKit: A .NET MIME creation and parser library with support for S/MIME, PGP, DKIM, TNEF and Unix mbox spools.
https://github.com/jstedfast/MimeKit

[研究][C#][ASP.NET] 加簽寄信 (使用 System.Net.Mail.MailMessage)
https://shaurong.blogspot.com/2019/10/caspnet-systemnetmailmailmessage.html

[研究][C#]加密加簽寄信(使用Cpi.Net.SecureMail)(一)
http://shaurong.blogspot.com/2017/02/ccpinetsecuremail.html

[研究][C#]加密加簽寄信(使用Cpi.Net.SecureMail)(二)
http://shaurong.blogspot.com/2017/02/ccpinetsecuremail_13.html

[研究][C#][ASP.NET] IIS SMTP 寄信失敗,拒絕存取路徑
https://shaurong.blogspot.com/2019/10/caspnet-iis-smtp.html

[研究] [ASP.NET] [C#] [WebForm] 寄信問題
http://shaurong.blogspot.com/2017/06/aspnet-c-webform.html

An S/MIME Library for Sending Signed and Encrypted E-mail
Pete Everett, 15 Jul 2010
https://www.codeproject.com/Articles/41727/An-S-MIME-Library-for-Sending-Signed-and-Encrypted

ASP.NET寄發加密加簽信件
https://www.nccst.nat.gov.tw/ArticlesDetail?lang=zh&seq=1160

Cpi.Net.SecureMail
https://www.codeproject.com/script/Content/ViewAssociatedFile.aspx?rzp=%2FKB%2Fsecurity%2FCPI_NET_SecureMail%2F%2FCpi.Net.SecureMail_src.zip&zep=Cpi.Net.SecureMail_src%2FCpi.Net.SecureMail%2FSecureMailMessage.cs&obid=41727&obtid=2&ovid=5

如何透過 .NET 送出一個包含 S/MIME 簽章的郵件
2009/06/06 21:20
https://blog.miniasp.com/post/2009/06/06/How-to-send-s-mime-email-using-net

1 則留言: