我只想检查 MIME 消息是否使用 Mimekit 加密或签名。
我不想解密它或验证它的签名,我只想知道它是加密的还是签名的。
我希望在 MimeMessage 类中找到它作为函数: IsSigned() 和 IsEncrypted() 但这些函数不存在!
谢谢你。
这些方法不存在,因为 aMimeMessage
本身不能被签名或加密,只有Body
消息的(或正文的子集)可以被签名或加密。
一个非常简单的解决方案是这样做:
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
.