加密Outlook中的BIG电子邮件导致C#中的低资源异常

时间:2015-08-05 08:05:39

标签: c# encryption outlook

我正在开发一个工具,它在Outlook 2013中批量加密带有S / MIME的电子邮件。它到目前为止工作,但是当我尝试加密一个非常大的电子邮件时(在测试用例中它是大约60MB原始)。我得到一个COMException,说明了无效的资源。

我可以通过与EWS和MimeKit一起工作来解决这个问题(MhisKit就像魅力一样!谢谢@jstedfast ),但我想找到一种工作方式Outlook,用于网络流量考虑。我知道这些更改最终将与Exchange同步,但在此过程中,它与带宽无关。

我也在看MapiEx,但是如果有一个更简单的解决方案,而不是另一个依赖(并且还有MFC),我会很开心!也许有一些设置,我以前必须做。

一些代码。它在其他地方捕获的异常。

public void String SetEncryption(MailItem mailItem)
{
    PropertyAccessor pa = null;
    try
    {
        pa = mailItem.PropertyAccessor;
        Int32 prop = (int)pa.GetProperty(_PR_SECURITY_FLAGS);
        Int32 newprop = prop | 1; 
        pa.SetProperty(_PR_SECURITY_FLAGS, newprop);
    }
    finally
    {
        Marshal.FinalReleaseComObject(pa);
        pa = null;
    }
}

编辑:当设置加密时,异常未到来,但是在保存结果后,设置加密后。

SetEncryption(mailItem);
mailItem.Save();

2 个答案:

答案 0 :(得分:1)

我自己解决了。 由于我在Outlook本身遇到了问题,因此我尝试使用MAPIEx访问电子邮件中的原始S / MIME附件,并使用MimeKit / BouncyCastle对其进行解密/加密。

同样的问题已经发生,但是有不同的错误消息,这会引导我访问以下网站:ASN.1 value too large

总结一下:Crypto API有两个签名。一个采用字节数组,一个采用流。第一个具有任意强制(!!!)限制为1亿字节。由于封装的CMS具有双base64,因此100 MB的比例为9/16,这是圆的约56 MB。

我认为,Outlook使用相同的API-Call,因此具有此限制。 我知道这不是事实,但证据强烈支持这一理论。 :)

答案 1 :(得分:0)

检查是否已安装KB 2480994:http://support.microsoft.com/kb/2480994