C# 如何检查MIME消息是否使用Mimekit加密或签名?

C# 如何检查MIME消息是否使用Mimekit加密或签名?,c#,mimekit,C#,Mimekit,我只想检查MIME消息是否使用Mimekit加密或签名 我不想解密它或验证它的签名,我只想知道它是加密的还是签名的 我希望在MimeMessage类中找到函数:IsSigned()&IsEncrypted(),但这些函数不存在 谢谢。这些方法不存在,因为不能对MimeMessage本身进行签名或加密,只能对消息的正文(或正文的子集)进行签名或加密 一个非常简单的解决方案是: var pkcs7 = message.Body as ApplicationPkcs7Mime; bool signe

我只想检查MIME消息是否使用Mimekit加密或签名

我不想解密它或验证它的签名,我只想知道它是加密的还是签名的

我希望在MimeMessage类中找到函数:IsSigned()&IsEncrypted(),但这些函数不存在


谢谢。

这些方法不存在,因为不能对
MimeMessage
本身进行签名或加密,只能对消息的
正文
(或正文的子集)进行签名或加密

一个非常简单的解决方案是:

var pkcs7 = message.Body as ApplicationPkcs7Mime;

bool signed = (message.Body is MultipartSigned) ||
    (pkcs7 != null && pkcs7.SecureMimeType == SecureMimeType.SignedData);

bool encrypted = (message.Body is MultipartEncrypted) ||
    (pkcs7 != null && pkcs7.SecureMimeType == SecureMimeType.EnvelopedData);
注意:
MultipartEncrypted
仅与PGP(不是S/MIME)一起使用,因此如果您只关心S/MIME,则无需检查
MultipartEncrypted

同样地,
ApplicationPkcs7Mime
仅用于S/MIME,因此如果您只关心PGP,则无需检查
ApplicationPkcs7Mime

不过,PGP和S/MIME(都可以)使用
多部分签名
,因此在任何一种情况下都必须进行检查


由于我使用过或收到过的每个客户机都只对邮件的顶级
正文部分进行签名和/或加密,因此您可能只需要进行上述检查。但是,MIME兼容的客户端可以对
正文的子部分进行签名和/或加密,因此如果希望100%兼容,您必须遍历MIME树并检查每个节点。

谢谢,我想这就是我所需要的。