EWS:从已签名的电子邮件中检索附件最近有一个问题,客户想向我们发送签名的电子邮件,所以当程序检索他们的附件时,一个名为“smime.p7m”的文件被保存而不是文件附件。在Outlook中查看邮件时,这个文件不存在,只有我们要的附件。但是,在单步执行代码时,电子邮件对象中列出的附件仅包含此.p7m文件。我从电子邮件中检索了mime内容,但它只是字节。当我在文本编辑器中查看.p7m文件时,我在底部文件中看到了我想要的文件的内容(最后的挑逗)!如何在不为感兴趣的内容解析.p7m文件的情况下获取原始附件?Exchange服务器是2010SP2,这一切都是通过使用EWS托管API的C#程序实现的。您可以使用EnvelopedCMS类从加密附件中获取MIME。假设您的安全上下文可以访问密钥。byte[]content=...来自smime.p7m附件的byte[]...varencrypted=newEnvelopedCms();加密。解码(内容);加密.Decrypt();byte[]unencryptedButRawMimeEntity=encrypted.ContentInfo.Content;这将允许您获得未加密的MIME实体(没有传输标头的原始电子邮件)。请注意,如果邮件已签名,则解密的MIME实体将是另一个附件,其SMIME类型标头等于签名数据。您可以使用SignedCMS类重复上述过程以公开其内容。应省略Decrypt调用。然后您必须解析/解码MIME以提取其文字和附件。执行此操作的代码显然驻留在System.Net.Mime命名空间中,但出于某种原因,Microsoft并未提供公共入口点。我在其他地方读到过,您可以通过反射访问它。这样做的缺点是它不受支持,非公共接口可能会在框架的更高版本中发生变化。这个问题中的代码向您展示了如何处理引用打印的传输编码。或者,您可以像我一样编写或借用您自己的MIME解析器。不幸的是,由于IP,我不能给你代码。当时我找不到一个简单的替代方案。现在,我很想尝试下面链接的NuGet包,并为自己省去一些痛苦。从OpenPOP.Net开始。您可以使用此项目中的代码获取灵感,查看此问题中的第三方选项,或尝试NuGet上的包。您应该查看MimeKit(MIME解析器+S/MIME和PGP支持)和MailKit(如果您需要SMTP、POP3和/或IMAP)。我在GitHub项目主页的文档中写了一些关于如何使用MimeKit的解密和签名验证API的示例。使用可通过NuGet和EWSManagedAPI访问的OpenPOP.NET,我能够检索嵌入在感兴趣电子邮件的mime内容中的附件。我使用了System.Exchange.WebServices.Data.Itememail=newSystem.Exchange.WebServices.Data.Item(myEmail);OpenPop.Mime.Message消息=newOpenPop.Mime.Message(email.MimeContent.Content);列出validMessageParts=message.FindAllAttachments().Where(x=>x.FileName.Contains(".csv")==true||x.FileName.Contains(".xlsx")==true||x.FileName。包含(".xls")==true).ToList();foreach(MessagePartmessagePartinvalidMessageParts){if(messagePart!=null){使用(FileStreamfileStream=newFileStream(savingPath+messagePart.ContentDisposition.FileName,FileMode.Create,FileAccess.ReadWrite)){messagePart.Save(fileStream);将特定电子邮件中的所有csv、xlsx和xls保存到我选择的目录中。以上是C#学习教程:EWS:Retrievetheentirecontentofattachmentsharingfromthesignedemail.如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
