找不到类型或命名空间名称 'WindowsSecureMimeContext'
The type or namespace name 'WindowsSecureMimeContext' could not be found
我正在尝试使用 MimeKit 发送数字签名的电子邮件。我用来签署电子邮件的证书存储在 LocalMachine 证书存储中,因此我想使用 WindowsSecureMimeContext
。但是,我在尝试使用它时遇到类型或名称空间找不到错误。我已经包含了 MimeKit
和 MimeKit.Cryptography
,但错误仍然存在。我正在尝试在一个 class 库项目中使用它,如果这有什么不同的话,目标是 .NET Core 2.2。
这是我的代码,知道我为什么会收到错误吗?
using MimeKit;
using MimeKit.Cryptography;
using BO;
namespace BLL
{
public class EmailService : IEmailService
{
public void Send(Email email)
{
CryptographyContext.Register(typeof(WindowsSecureMimeContext));
var message = new MimeMessage();
message.Subject = email.Subject;
using (var ctx = new WindowsSecureMimeContext(System.Security.Cryptography.X509Certificates.StoreLocation.LocalMachine)) {
}
}
}
}
下面是我能够开始工作的更新代码。
using MailKit.Net.Smtp;
using Microsoft.Extensions.Configuration;
using MimeKit;
using MimeKit.Cryptography;
using OGC.CIS.ADR.BO;
using System.Security.Cryptography.X509Certificates;
namespace OGC.CIS.ADR.BLL
{
public class EmailService : IEmailService
{
private readonly IConfiguration _config;
public EmailService(IConfiguration config)
{
_config = config;
}
public void Send(Email email)
{
CryptographyContext.Register(typeof(MySecureMimeContext));
var message = new MimeMessage();
var sender = new MailboxAddress(_config.GetValue<string>("AppSettings:SubjectCN"));
message.From.Add(sender);
message.Subject = email.Subject;
var body = new TextPart("plain")
{
Text = email.Body
};
using (var ctx = new MySecureMimeContext()) {
var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
var certs = store.Certificates.Find(X509FindType.FindBySubjectName, _config.GetValue<string>("AppSettings:SubjectCN"), true);
//var cert = Org.BouncyCastle.Security.DotNetUtilities.FromX509Certificate(certs[0]);
ctx.Import(certs[0]);
message.Body = MultipartSigned.Create(ctx, sender, DigestAlgorithm.Sha256, body);
}
}
}
}
这里是我创建的用于存储私钥的更新导入方法。
public void Import (System.Security.Cryptography.X509Certificates.X509Certificate2 certificate)
{
if (certificate == null)
throw new ArgumentNullException(nameof(certificate));
var bcCert = Org.BouncyCastle.Security.DotNetUtilities.FromX509Certificate(certificate);
var fingerprint = bcCert.GetFingerprint();
if (fingerprints.Add(fingerprint))
certificates.Add(bcCert);
if (!keys.ContainsKey(fingerprint))
keys.Add(fingerprint, Org.BouncyCastle.Security.DotNetUtilities.GetKeyPair(certificate.PrivateKey).Private);
}
WindowsSecureMimeContext 在 .NETStandard 2.0 版本的库中不存在,因为 System.Security API class 所需的 class 不存在。
您需要编写一个自定义 SecureMimeContext class.You如果您只是想要一些超级简单的东西,您很可能想要子class DefaultSecureMimeContext 或 TemporarySecureMimeContext。
我正在尝试使用 MimeKit 发送数字签名的电子邮件。我用来签署电子邮件的证书存储在 LocalMachine 证书存储中,因此我想使用 WindowsSecureMimeContext
。但是,我在尝试使用它时遇到类型或名称空间找不到错误。我已经包含了 MimeKit
和 MimeKit.Cryptography
,但错误仍然存在。我正在尝试在一个 class 库项目中使用它,如果这有什么不同的话,目标是 .NET Core 2.2。
这是我的代码,知道我为什么会收到错误吗?
using MimeKit;
using MimeKit.Cryptography;
using BO;
namespace BLL
{
public class EmailService : IEmailService
{
public void Send(Email email)
{
CryptographyContext.Register(typeof(WindowsSecureMimeContext));
var message = new MimeMessage();
message.Subject = email.Subject;
using (var ctx = new WindowsSecureMimeContext(System.Security.Cryptography.X509Certificates.StoreLocation.LocalMachine)) {
}
}
}
}
下面是我能够开始工作的更新代码。
using MailKit.Net.Smtp;
using Microsoft.Extensions.Configuration;
using MimeKit;
using MimeKit.Cryptography;
using OGC.CIS.ADR.BO;
using System.Security.Cryptography.X509Certificates;
namespace OGC.CIS.ADR.BLL
{
public class EmailService : IEmailService
{
private readonly IConfiguration _config;
public EmailService(IConfiguration config)
{
_config = config;
}
public void Send(Email email)
{
CryptographyContext.Register(typeof(MySecureMimeContext));
var message = new MimeMessage();
var sender = new MailboxAddress(_config.GetValue<string>("AppSettings:SubjectCN"));
message.From.Add(sender);
message.Subject = email.Subject;
var body = new TextPart("plain")
{
Text = email.Body
};
using (var ctx = new MySecureMimeContext()) {
var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
var certs = store.Certificates.Find(X509FindType.FindBySubjectName, _config.GetValue<string>("AppSettings:SubjectCN"), true);
//var cert = Org.BouncyCastle.Security.DotNetUtilities.FromX509Certificate(certs[0]);
ctx.Import(certs[0]);
message.Body = MultipartSigned.Create(ctx, sender, DigestAlgorithm.Sha256, body);
}
}
}
}
这里是我创建的用于存储私钥的更新导入方法。
public void Import (System.Security.Cryptography.X509Certificates.X509Certificate2 certificate)
{
if (certificate == null)
throw new ArgumentNullException(nameof(certificate));
var bcCert = Org.BouncyCastle.Security.DotNetUtilities.FromX509Certificate(certificate);
var fingerprint = bcCert.GetFingerprint();
if (fingerprints.Add(fingerprint))
certificates.Add(bcCert);
if (!keys.ContainsKey(fingerprint))
keys.Add(fingerprint, Org.BouncyCastle.Security.DotNetUtilities.GetKeyPair(certificate.PrivateKey).Private);
}
WindowsSecureMimeContext 在 .NETStandard 2.0 版本的库中不存在,因为 System.Security API class 所需的 class 不存在。
您需要编写一个自定义 SecureMimeContext class.You如果您只是想要一些超级简单的东西,您很可能想要子class DefaultSecureMimeContext 或 TemporarySecureMimeContext。