- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 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,这是“东西”。
最佳答案
看起来您在使用 HtmlBody
时遇到了两个问题:
任何时候您可能正在处理一个格式不正确的 XML 字符串,您最好的选择是使用像 HtmlAgilityPack 这样的解析器。收拾残局。这是一个使用 XPath 的简单辅助方法涵盖上述两个问题,并根据注释更新删除破坏 iText XML Worker 的 HtmlCommentNode
:
string FixBrokenMarkup(string broken)
{
HtmlDocument h = new HtmlDocument()
{
OptionAutoCloseOnEnd = true,
OptionFixNestedTags = true,
OptionWriteEmptyNodes = true
};
h.LoadHtml(broken);
// UPDATED to remove HtmlCommentNode
var comments = h.DocumentNode.SelectNodes("//comment()");
if (comments != null)
{
foreach (var node in comments) { node.Remove(); }
}
return h.DocumentNode.SelectNodes("child::*") != null
// ^^^^^^^^^^
// XPath above: string plain-text or contains markup/tags
? h.DocumentNode.WriteTo()
: string.Format("<span>{0}</span>", broken);
}
为了完整起见,生成 PDF 的代码。测试并使用您在上面提供的 pastebin 链接:
var fixedMarkup = FixBrokenMarkup(PASTEBIN);
// swap initialization to verify plain-text works too
// var fixedMarkup = FixBrokenMarkup("some text");
using (var stream = new MemoryStream())
{
using (var document = new Document())
{
PdfWriter writer = PdfWriter.GetInstance(document, stream);
document.Open();
using (var stringReader = new StringReader(fixedMarkup))
{
XMLWorkerHelper.GetInstance().ParseXHtml(
writer, document, stringReader
);
}
}
File.WriteAllBytes(OUTPUT, stream.ToArray());
}
关于c# - Mailkit:使用 iTextSharp XMLWorker 将 HtmlBody 转换为 pdf 抛出 "The document has no pages",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42577638/
子冷电子邮件() Dim OutLookApp As Object Dim OutLookMailItem As Object Dim lastrow As Long Dim iCounter As
如何将 Outlook 中的 HTMLBody 从右到左对齐? 这是我发送消息的代码(正文在文本框中) private void sendmail() { o
我尝试了多种方法,包括制作另一个充当空格的字符串,以及“ ”。 StrBody2 = "Downtime particulars" & "" & _ "Short desc
我想回复一个从表单中提取电子邮件地址的网络表单。 Web 表单位于表格中,因此 ParseTextLinePair() 函数返回空白作为标签旁边列中的电子邮件地址。 如何从网络表单中提取电子邮件地址?
我的 outlook MailItem 对象只返回有限的 HTML 格式。我需要能够获得完整的 HTML 格式...我收到以下消息: 下面是精简的 HTML 片段,后面是正确的 HTML Test
我正在尝试让我的 C# 应用程序生成表单电子邮件。我本应在周五的一个小时内完成这件事……但 Outlook 非常不听话。 似乎无论我在 MailItem 的 HTMLBody 中指定字体大小的方式如何
我正在开发一个项目,该项目将 Outlook session 和约会从 Outlook 日历链接到格式化的 Excel 电子表格。我可以使用 VBA 毫无问题地提取 Outlook 约会/ sessi
首先,我通过 Outlook 创建一封电子邮件: Sub CreateHTMLMail() 'Creates a new e-mail item and modifies its properties
型号 public class Mail { public int Id { get; set; } public string Tema { get; set; } pub
我有一个 VBA cody,它可以从 excel 表中创建 Outlook 电子邮件正文。 基于下拉值的 Excel 表中的值。 (月)。 如果下拉显示一月,该表也显示一月。 我的问题是 Outloo
据我所知,我的电子邮件应用程序仅支持带有附件的纯文本。如果附件列表为空,我会以简单的方式处理它,只需发送 mime 消息,如果附件列表不为空,我正在为每个附件创建正文部分,并为正文创建一个正文部分。添
我有一个功能区按钮,它通过修改基于其中的收件人的 MailItem 对象将文本插入到 outlook 检查器中。单击时调用的方法如下所示: public async void OnTemplateCl
当我尝试从字典创建 json 时,我得到一个错误的格式,用分号代替 json 的逗号 let jsonData = try? JSONSerialization.data(withJSONObject
我们正在创建一个 Outlook mailitem 并设置邮件正文的一部分。然而,客户希望消息正文以干净的新行结尾,以便他可以添加更多文本。 这是一个微不足道的请求,但是...... 似乎在 .HTM
我的工作表上有一个按钮来发送电子邮件(还有更多,但不重要)。我想要我的默认签名及其 HTML 格式,但两个选项都没有产生我想要的结果: .Body生成正确的正文(字体和回车),但签名是纯文本 .HMT
我在使用 HTMLBody 格式的 ASP Classic 中使用 CDOSYS 消息传递系统发送电子邮件时遇到问题。它似乎有字符限制,并且在发送电子邮件消息时,它会在电子邮件底部周围切断消息。起初,
我正在尝试将电子邮件 VBA 正文中的特定文本加粗。在当前状态下,我无法格式化 .body 下的任何文本. 但是,当我更改为 .html body 时,我可以加粗文本。例如,如果我使用“JOB NUM
不确定是否可行,但我正在尝试在 htmlBody 中传递一个简单的警报 javascript 函数。电子邮件带有一个按钮,当您单击该按钮时,它会调用简单的 javascript 函数。这似乎不起作用,
我正在编写一个邮件合并脚本,该脚本使用 GmailApp 获取邮件草稿,获取其 htmlBody 和附件,并使用它们发送新邮件。 它可以很好地处理附件,甚至可以处理从外部 url 插入的内联消息(包括
我正在编写一个邮件合并脚本,该脚本使用 GmailApp 获取邮件草稿,获取其 htmlBody 和附件,并使用它们发送新邮件。 它可以很好地处理附件,甚至可以处理从外部 url 插入的内联消息(包括
我是一名优秀的程序员,十分优秀!