在R有任何方法可以发送RMarkdown v2 html文件作为电子邮件的正文

时间:2015-09-11 10:09:44

标签: css r r-markdown sendmailr

我开发了一个报告,它大量使用了RMarkdown v2中的功能,特别是为html文档添加css类和id的功能,以便使用样式表更好地控制输出。我希望将这些报告发送到电子邮件正文中。我一直在尝试使用send.mail(mailR)。根据他们的gitgub自述文件(https://github.com/rpremraj/mailR/blob/master/README.md

  

mailR目前不支持解析使用数据URI方案编码的内嵌图像。请改用下面的解决方法:

     

首先,从R终端创建HTML文件(这里重要的是选项不包括“base64_images”---请参阅?markdown :: markdownHTMLOptions):

library(knitr)
knit2html("my_report.Rmd", options = "")
  

现在您可以通过mailR ...

发送生成的HTML文件

问题是knit2html似乎仍然使用RMarkdown v1,它不支持将css类和id添加到文档的语法。有没有其他解决方法,例如使用rmarkdown :: render并以某种方式通过 options 参数?或者knitr是否有使用RMarkdown v2的时间表?

这可以转载如下:

ExampleStyles.css

.GreenItalic {
  font-style: italic;
  color: green;
}

Example.Rmd

---
output: html_document
css: ExampleStyles.css
---

# Heading { .GreenItalic }

使用RStudio进行编织(渲染)时,输出与预期一致。 “标题”用斜体和绿色表示。

要通过电子邮件发送,可以使用以下代码:

library(mailR)
library(knitr)

ReportName <- "Example"
knit2html(paste0(ReportName, ".Rmd"), options = "", styles = "ExampleStyles.css")

send.mail(from = "RTestingTesting@gmail.com",
          to = "RTestingTesting@gmail.com",
          subject = "Subject",
          html = TRUE,
          inline = TRUE,
          body = paste0(ReportName, ".html"),
          smtp = list(host.name = "smtp.gmail.com", port = 465, user.name = "RTestingTesting", passwd = "Password", ssl = TRUE),
          authenticate = TRUE,
          send = TRUE)

但是在这种情况下,输出为“Heading {.GreenItalic}”,为黑色和非斜体。据我所知,这是因为knitr正在使用RMarkdown v1。

2 个答案:

答案 0 :(得分:4)

knitr::knit2html()仅适用于记录的R Markdown v1。 knit2html()的帮助页面中还记录了您应使用rmarkdown::render()呈现R Markdown v2文档。

要关闭base64编码,您可以在YAML元数据中使用选项self_contained: no,例如

---
output: 
  html_document: 
    self_contained: no
---

答案 1 :(得分:0)

我所做的一种解决方法/解决方案是设置参数:

onChildAdded()

(或为markdownToHTML选项选择自己的参数集,同时确保避免添加“ base64_images”)

这样,我设法发送了html并获得了报告,以在电子邮件的正文中显示报告中包含的图像。这些图像位于生成html的同一文件夹中。

我希望这会有所帮助。