【问题标题】:How do I preview EML file in a web application?如何在 Web 应用程序中预览 EML 文件?
【发布时间】:2018-10-22 07:56:42
【问题描述】:

我需要能够在基于 Angular/.Net 核心 api 的 Web 应用程序中预览 EML 文件。我找到了微软提供的here 服务,它只预览 Word、Excel 或 PowerPoint 文档。我可以将此页面嵌入网络应用程序并预​​览这些文件类型。但是此服务不支持 EML 文件。

encryptomatic 提供的另一项服务可以在线预览 EML 文件。但是他们没有可以嵌入到应用程序中的东西。

Google 文档查看器能够预览图像、文本和 pdf,但也不支持预览 EML 文件。

我需要一个类似于 Outlook Web App 预览 EML 文件的功能。

我发现了一些 npm 包,例如 eml-format,它们可以解析 EML 文件。我也知道 Aspose 提供 EML 解析器。但是,我有点犹豫是否要构建自己的 EML 查看器,因为我需要处理嵌入式图像、多部分消息、附件和天知道是什么!

欢迎提出任何建议。

【问题讨论】:

  • 我敢打赌 npm 解析器还不错。 EML 是一种非常成熟的格式,在 RFC 822 中指定,因此只要解析器遵循规范,它可能会工作得很好。至于谷歌文档,有一个查看 EML 文件的扩展程序。我向我的谷歌驱动器发送了一个 EML,它提示我安装扩展程序,并且它正确预览了我的 EML 文件。 mhtviewer.booogle.net
  • 我走上了构建自己的 EML 查看器的道路,结果发现它实际上一点也不难。使用 Aspose 解析服务器上的 EML,它实际上在解析方面做得很好。感谢您给我一点推动力,让我沿着这条路走下去@chilinut。它得到了回报!

标签: angular .net-core outlook-addin outlook-web-addins eml


【解决方案1】:
Aspose.Email.MailMessage mailMessage = Aspose.Email.MailMessage.Load(templateStream);
            foreach (var linkedResource in mailMessage.LinkedResources)
            {
                using (var memoryStream = new MemoryStream())
                {
                    linkedResource.ContentStream.CopyTo(memoryStream);
                    string base64String = Convert.ToBase64String(memoryStream.ToArray());
                    mailMessage.HtmlBody = mailMessage.HtmlBody.Replace($"cid:{linkedResource.ContentId}", $"data:{linkedResource.ContentType.MediaType};base64," + base64String);

                }
            }
        }
        mailMessage.HtmlBody = Regex.Replace(mailMessage.HtmlBody, @"\<!--(.|\n)*?-->", "");

如果其他人正在寻找相同的解决方案,这就是我所做的。使用 Aspose 电子邮件库读取 EML/MSG 流并从中提取 HTML。需要做的另外几件事是用 Base64 字符串替换内联图像的 CID,并使用正则表达式删除注释掉的代码。

【讨论】:

  • 您的解决方案支持附件吗?文件如何作为 html 的一部分显示?
  • 对于附件,我结合使用 Google 文档查看器和 Microsoft Office Online Doc Viewer。我从服务器获取附件元数据(不是附件本身),然后单击每个附件,调用 Google 文档查看器或 Microsoft Office Online Doc Viewer 并向 google 或 office api 提供一个端点,该端点将流式传输附件数据从我们的服务器。
猜你喜欢
  • 2011-03-27
  • 1970-01-01
  • 2011-02-26
  • 1970-01-01
  • 1970-01-01
  • 2020-01-03
  • 2023-03-08
  • 2012-04-28
  • 2011-04-28
相关资源
最近更新 更多