【发布时间】:2017-07-23 11:46:02
【问题描述】:
我正在尝试使用 Mailkit 转换从邮件服务器收到的电子邮件的 HtmlBody,看起来 iTextSharp 并不喜欢我传递的 html。
我的方法适用于“示例”html 代码,但我收到 The document has no pages 错误消息,看起来当 html 不再是 html 时会抛出它。
public void GenerateHtmlFromBody(UniqueId uid)
{
var email = imap.Inbox.GetMessage(uid);
Byte[] bytes;
using (var ms = new MemoryStream())
{
using (var doc = new Document())
{
using (var writer = PdfWriter.GetInstance(doc, ms))
{
doc.Open();
//Sample HTML and CSS
var example_html = @"<p>This <em>is </em><span class=""headline"" style=""text-decoration: underline;"">some</span> <strong>sample <em> text</em></strong><span style=""color: red;"">!!!</span></p>";
var example_css = @".headline{font-size:200%}";
using (var srHtml = new StringReader(email.HtmlBody))
{
//Parse the HTML
iTextSharp.tool.xml.XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, srHtml);
}
doc.Close();
}
}
bytes = ms.ToArray();
}
var testFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "processedMailPdf.pdf");
System.IO.File.WriteAllBytes(testFile, bytes);
}
我正在访问MimeMessage.HtmlBody 并进行调试,看起来它实际上是 html。
Here is a link to pastebin 用于检查MimeMessage 的 HtmlBody,因为我在这里达到了字符数限制。
我错过了什么?谢谢。
编辑:我尝试过使用 HTMLWorker(已弃用),但它并不稳定。它适用于一封电子邮件,但不适用于其他电子邮件。当然不是解决方案,但它最终从Mailkit生成了一个pdf,这是“东西”。
【问题讨论】:
-
您是否尝试过其他电子邮件? html 看起来也很糟糕,我的编辑器甚至无法识别可折叠标签(VS Code)
-
感谢您指出这一点。那是一封来自时事通讯的转发邮件。我刚刚尝试使用 Outlook 发送的典型 Outlook“自动测试”邮件来测试连接是否良好,但它不起作用。问题是 Mailkit 将其识别为 html,但查看 HtmlBody 它只是纯文本:o
-
你应该尝试这样的事情:raw.githubusercontent.com/leemunroe/…
-
问题可能是您使用的 XHTML 解析器仅适用于严格符合 XML 标准的 HTML(您在 pastebin 上的示例不适用)。您可以尝试使用 HtmlAgilityPack 来解析它,但我不确定这是否允许您将其转换为 PDF。
-
@mkl - 如果
HtmlBody有时确实是第二条评论中提到的纯文本,"<html>" + email.HtmlBody + "</html>"会抛出Unhandled Exception: System.IO.IOException: The document has no pages.。使用 iTextSharp 和 XML Worker 版本 5.5.10 进行测试。也许你发现了一个错误......
标签: c# itext html-agility-pack mailkit xmlworker