可以使用EnvelopedCMS
類從加密附件中獲取MIME。假設您的安全上下文可以訪問密鑰。
byte[] content = ...The byte[] from the smime.p7m attachment ...
var encrypted = new EnvelopedCms();
encrypted.Decode(content);
encrypted.Decrypt();
byte[] unencryptedButRawMimeEntity = encrypted.ContentInfo.Content;
這將允許您獲取未加密的MIME實體(沒有傳輸標題的原始電子郵件)。
注如果消息進行簽名,所述解密的MIME實體將與一個SMIME Type
部首等於signed-data
另一個單個附件。您可以使用SignedCMS
類重複上述過程,以顯示其內容。應該省略Decrypt
調用。
然後您必須解析/解碼MIME以提取其正文和附件。
執行此操作的代碼顯然位於System.Net.Mime
命名空間,但Microsoft無論出於何種原因都未提供公共入口點。我讀過其他地方,你可以使用反射來訪問它。這樣做的缺點是,它不被支持,非公開接口在後來的框架版本中可能會發生變化。 this question中的代碼顯示如何處理quoted-printable
傳輸編碼。
或者,您可以像我一樣編寫或借用您自己的MIME解析器。不幸的是,由於IP,我不能給你代碼。
當時我無法找到一個簡單的選擇。現在我很想嘗試下面鏈接的NuGet包,並節省一些痛苦。從OpenPOP.Net開始。
您可以使用code in this project爲靈感,看看第三方選項this question,或嘗試these packages上的NuGet。
謝謝Jodrell。我將看看OpenPOP.Net,看看我需要的是什麼。然後,我會發布任何積極的結果,我覺得:) – grantathon