在 Outlook 中加密 BIG 电子邮件导致 C# 中的低资源异常
Encrypting BIG emails in Outlook cause Low Ressources Exception in C#
我正在开发一种工具,它可以在 Outlook 2013 中使用 S/MIME 批量加密电子邮件。到目前为止它可以正常工作,但是当我尝试加密一封非常大的电子邮件时(在测试用例中它是关于60MB 原始)。我收到 COMException,说明资源不足。
我可以通过直接使用 EWS 和 MimeKit(这很有魅力!谢谢@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();
检查是否安装了 KB 2480994:http://support.microsoft.com/kb/2480994
我自己解决了。
由于我在 Outlook 本身有问题,我正在尝试 MAPIEx 访问电子邮件中的原始 S/MIME 附件,并使用 MimeKit/BouncyCastle.[=11= de-/encrypt 它]
出现了同样的问题,但错误消息不同,这将我带到了以下站点:ASN.1 value too large。
总结一下:Crypto API 有两个签名。一个接受字节数组,一个接受流。第一个有 1 亿字节的任意强加 (!!!) 限制。由于封装的CMS有double base64,所以这100MB的比例是9/16,大约是56MB。
我假设 Outlook 使用相同的 API-Call,因此有此限制。
我知道这不是事实,但证据有力地支持了这一理论。 :)
我正在开发一种工具,它可以在 Outlook 2013 中使用 S/MIME 批量加密电子邮件。到目前为止它可以正常工作,但是当我尝试加密一封非常大的电子邮件时(在测试用例中它是关于60MB 原始)。我收到 COMException,说明资源不足。
我可以通过直接使用 EWS 和 MimeKit(这很有魅力!谢谢@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();
检查是否安装了 KB 2480994:http://support.microsoft.com/kb/2480994
我自己解决了。 由于我在 Outlook 本身有问题,我正在尝试 MAPIEx 访问电子邮件中的原始 S/MIME 附件,并使用 MimeKit/BouncyCastle.[=11= de-/encrypt 它]
出现了同样的问题,但错误消息不同,这将我带到了以下站点:ASN.1 value too large。
总结一下:Crypto API 有两个签名。一个接受字节数组,一个接受流。第一个有 1 亿字节的任意强加 (!!!) 限制。由于封装的CMS有double base64,所以这100MB的比例是9/16,大约是56MB。
我假设 Outlook 使用相同的 API-Call,因此有此限制。 我知道这不是事实,但证据有力地支持了这一理论。 :)