常见问题
Question
嗨!对于以下代码:
Aspose.Email.Mime.ContentType ct = new Aspose.Email.Mime.ContentType();
ct.MediaType = "application/msword";
ct.CharSet = "ISO-2022-JP";
Attachment att = new Attachment("Test.doc", ct);
Console.WriteLine(att.ContentType.Name);
att.ContentType.Name 返回附件文档的名称。这是预期的行为吗?
答案:是的,这是预期的行为。如果未显式设置 ContentType.Name,则会使用文件名的值作为名称。
问题:
为什么 ExchangeWebServiceClient.FetchMessage 会把嵌入的图片作为附件?
答案:Microsoft Exchange Server 具有此类功能,如 ‘内容转换,这是一种为每个收件人正确格式化消息的过程。是否对消息进行内容转换取决于消息的目标和所处理的消息格式。
换句话说,对于未知的客户端,服务器可以根据服务器设置执行邮件格式化(以选择最合适的邮件格式)。正如你所理解的,最通用的格式是 ’text/plain’,这些设置可以在服务器上配置。
请注意:Outlook 是众所周知的 Microsoft Exchange Server 邮件客户端(尤其是当 MS Outlook 的版本早于服务器时)。这意味着 Exchange Server 会根据 Outlook 的功能把邮件格式传递给客户端。在我们的场景中,当 ExchangeWebServiceClient 尝试检索邮件时,Exchange 对我们的组件的能力未知。服务器以最简格式(text/plain)将邮件传递给组件。换句话说,服务器响应中没有任何 html 部分。在这种情况下,图片会作为附件包含在邮件中。
有一种方法可以避免所描述的问题。如果服务器上的邮件的 Content-Type 为 multipart/alternative 并且其中一个部分是 text/plain,则该邮件会原样传递给客户端。由于邮件还包含 html 部分,图片会显示在邮件正文中。在当前情形下,邮件是通过 MS Outlook 添加到 MS Exchange 的,结果邮件的 Content-Type 并非 ‘multipart/alternative’。因此在获取邮件时会出现问题。例如,这里有类似问题的示例:一个(http://support.risualblogs.com/blog/2011/02/24/html-mails-sent-via-owa-and-outlook-2011-are-received-as-plain-text-mails-externally/), 二个(http://forums.mozillazine.org/viewtopic.php?f=39&t=628678), 三个(http://stackoverflow.com/questions/4681798/how-do-i-send-html-multipart-alternative-from-exchange-web-services-2010-sp1)。综上所述,问题中描述的情况(图片作为附件包含在邮件中)不是 Aspose 组件的错误,而是 Exchange 服务器的特定特性。
Question: 如何从读取包含嵌入 OLE 对象的 MapiMessage 所得到的 "oleData.mso" 附件中提取数据?
Answer: 像 "oleData.mso" 这样的文件是 Microsoft 复合文档文件(MCDF)格式,不幸的是,此类文件的支持超出了 Aspose.Email 的范围。不过,有一些开源 .NET 库,例如 OpenMCDF,可用于读取此类文件的内容并保存到磁盘。
Question: 我们能在并行线程中使用相同对象写入同一个 PST 文件吗?
Answer: 不,在这种情况下不能保证线程安全。消息写入应在单线程中进行。但是,产品必须能够正确处理来自不同线程的不同对象。