我需要使用C#创建S / MIME消息(如RFC 2633,“S / MIME版本3消息规范”和RFC 3335中所述)。 我能找到的唯一一个S / MIME库是一个商业库(http://www.example-code.com/csharp/smime.asp),这对我们没有好处。
是否有任何现有的库可以完成创建S / MIME消息,特别是.p7s文件?
我拥有需要进入此文件的所有加密和签名元素,但我想创建.p7s文件,而无需借助RFC文档手动编写我自己的库...
编辑: 我找到了另一个commercial S/MIME library,这仍然不符合我们的要求。 它看起来越来越像我将不得不手动滚动一个S / MIME库,这很难过。 是.net中的每个人都需要使用商业,封闭源库来进行S / MIME吗?
答案 0 :(得分:10)
我编写了自己的MIME库,支持名为MimeKit的S / MIME,它比基于System.Net.Mail的任何东西都强大得多。
它支持原始的8位头,rfc822组地址,从地址头中的rfc822注释中删除名称(To / Ccc / Bcc / etc),解析mbox格式的消息假脱机(包括对基于Content-Length的SunOS格式的支持)并且它比任何其他C#MIME解析器快一个数量级,因为它是基于字节流而不是基于TextReader的(这也是它比任何其他C#解析器更好地支持原始8位头的方式)。
答案 1 :(得分:3)
看看Rebex Secure Mail。这是一个我使用多年的非常稳定的库。它是100%托管代码,源代码也可用。
答案 2 :(得分:2)
CodeProject上有一个非常好的S / MIME类。
http://www.codeproject.com/KB/security/CPI_NET_SecureMail.aspx
答案 3 :(得分:2)
我花了很多时间为.NET寻找一个好的S / MIME库,没有运气。我最终创建了自己的,名为OpaqueMail。
它是开源的,完全免费的。它继承自System.Net.Mail.SmtpClient类,因此移植现有代码非常简单。它还包括使用POP3和IMAP的类。
发送S / MIME三重包装邮件(经过数字签名,加密,然后再进行数字签名)的示例如下:
// Instantiate a new SMTP connection to Gmail using TLS/SSL protection.
SmtpClient smtpClient = new SmtpClient("smtp.gmail.com", 587);
smtpClient.Credentials = new NetworkCredential("username@gmail.com", "Pass@word1");
smtpClient.EnableSsl = true;
// Create a new MailMessage class with lorem ipsum.
MailMessage message = new MailMessage("username@gmail.com", "user@example.com", "Example subject", "Lorem ipsum body.");
// Specify that the message should be signed, have its envelope encrypted, and then be signed again (triple-wrapped).
message.SmimeSigned = true;
message.SmimeEncryptedEnvelope = true;
message.SmimeTripleWrapped = true;
// Specify that the message should be timestamped.
message.SmimeSigningOptionFlags = SmimeSigningOptionFlags.SignTime;
// Load the signing certificate from the Local Machine store.
message.SmimeSigningCertificate = CertHelper.GetCertificateBySubjectName(StoreLocation.LocalMachine, "username@gmail.com");
// Send the message.
await smtpClient.SendAsync(message);
希望这有帮助。
答案 4 :(得分:0)
我没有使用过这个S / MIME库,但是我的应用程序使用了来自同一供应商的另一个库,它运行正常:
http://www.chilkatsoft.com/mime-dotnet.asp
他们执行p7s签名的库是独立的,这可能是一个问题,具体取决于您的预算:
答案 5 :(得分:0)
实现完整的s / mime非常困难,因为它需要大量的额外工作。您可以使用SMIME components in SecureBlackbox完成任务。
更新:SecureBlackbox是我们的产品。它完全支持Silverlight和Windows Phone(包括Mango)。