在 web 应用程序中如何预览 EML 文件?

3
我需要在Angular/.Net Core API构建的Web应用程序中预览EML文件。我能找到微软提供的一个服务(在此处),该服务仅支持预览Word、Excel或PowerPoint文档。我可以将此页面嵌入Web应用中并预览这些文件类型。但是该服务不支持EML文件。
另有一个由Encryptomatic提供的在线预览EML文件的服务。但它们没有可嵌入应用程序的东西。
Google文档查看器可以预览图像、文本和PDF文件,但也不支持预览EML文件。
我需要类似于Outlook Web App预览EML文件的功能。
我发现了一些npm包,如eml-format,可以解析EML文件。我也知道Aspose提供了EML解析器。然而,我有些犹豫要走自己构建EML查看器的路线,因为我需要处理嵌入的图像、多部分消息、附件等等!
欢迎任何建议。

1
我敢打赌npm解析器并不那么糟糕。EML是一种非常成熟的格式,规范在RFC 822中指定,只要解析器遵循规范,它可能会工作得非常好。至于谷歌文档,有一个可以查看EML文件的扩展程序。我将一个EML文件发送到我的谷歌云端硬盘,它提示我安装该扩展程序,并正确地预览了我的EML文件。http://mhtviewer.booogle.net/ - chiliNUT
我走上了构建自己的EML查看器的道路,结果发现其实并不难。在服务器上使用Aspose解析EML,它实际上做了相当好的解析工作。感谢@chilinut给我一点推动,让我走上了这条路!最终收到了回报! - Alvin Saldanha
1个回答

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。还需要进行一些额外的操作,例如将CID替换为Base64字符串以用于内联图像,并使用正则表达式删除注释代码。

你的解决方案支持附件吗?文件如何作为HTML的一部分显示? - Omtechguy
对于附件,我使用Google文档查看器和Microsoft Office Online文档查看器的组合。我从服务器获取附件元数据(而不是附件本身),并在单击每个附件时调用Google文档查看器或Microsoft Office Online文档查看器,并向Google或Office API提供一个端点,以从我们的服务器流式传输附件数据。 - Alvin Saldanha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接