我想要检查MIME消息是否使用Mimekit进行加密或签名。
我不想解密或验证其签名,我只是想知道它是加密还是签名。
我希望找到它作为函数:IsSigned()&在MimeMessage类中是IsEncrypted()但这些函数不存在!
谢谢。
答案 0 :(得分:4)
这些方法不存在,因为MimeMessage
本身无法签名或加密,只能对邮件的Body
(或正文的一部分)进行签名或加密。< / p>
一个非常简单的解决方案是:
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(可以)都使用MultipartSigned
,所以你必须在任何一种情况下检查它。
由于我曾经使用或接收邮件的每个客户只能对邮件的顶级Body
部分进行签名和/或加密,因此您可能需要进行上述检查。但是,对于符合MIME的客户端,可能可以签署和/或加密Body
的子部分,因此您必须遍历MIME树并检查每个节点是否你希望100%合规。