В R есть ли способ отправить html-файл RMarkdown v2 в качестве тела электронного письма

Я разработал отчет, в котором интенсивно используются функции RMarkdown v2, особенно функция добавления классов CSS и идентификаторов в html-документы, чтобы иметь больший контроль над выводом с использованием таблиц стилей. Я хочу отправить эти отчеты в теле электронного письма. Я пытался сделать это с помощью send.mail (mailR). Согласно их файлу readme на gitgub (https://github.com/rpremraj/mailR/blob/master/README.md)

mailR в настоящее время не поддерживает разрешение встроенных изображений, закодированных с использованием схемы URI данных. Вместо этого используйте обходной путь ниже:

Во-первых, создайте HTML-файл из терминала R (здесь важно то, что параметры не включают base64_images --- см.? Markdown :: markdownHTMLOptions):

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

Теперь вы можете отправить получившийся HTML-файл через mailR ...

Проблема в том, что knit2html, похоже, все еще использует RMarkdown v1, который не поддерживает синтаксис для добавления классов css и идентификаторов в документы. Есть ли какой-либо другой обходной путь, например, с использованием rmarkdown :: render и каким-то образом проходя через параметр options? Или есть сроки, когда knitr сможет использовать RMarkdown v2?

Это можно воспроизвести следующим образом:

ExampleStyles.css

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

Пример.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 = "[email protected]",
          to = "[email protected]",
          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)

Однако в этом случае на выходе будет Заголовок {.GreenItalic} черным шрифтом без курсива. Насколько мне известно, это связано с тем, что knitr использует RMarkdown v1.


person Graeme    schedule 11.09.2015    source источник
comment
У нас нет кода для вашего рабочего процесса, поэтому мы не знаем, как помочь.   -  person hrbrmstr    schedule 11.09.2015
comment
@Graeme Почему вы не можете просто использовать select all в обработанном HTML-коде, а затем вставить его в электронное письмо?   -  person Paul James    schedule 11.09.2015
comment
hrbrmstr, извините за это. Добавлен воспроизводимый пример.   -  person Graeme    schedule 11.09.2015
comment
Пол, это автоматический отчет.   -  person Graeme    schedule 11.09.2015
comment
Думаю, yihui, возможно, ответил на ваш вопрос здесь   -  person blep    schedule 11.09.2015
comment
Dd3, кодировка base64 - это отдельная проблема, она должна быть установлена ​​на FALSE, но это не связано с этой проблемой.   -  person Graeme    schedule 12.09.2015


Ответы (2)


knitr::knit2html() предназначен только для R Markdown v1, как указано в документации. На странице справки knit2html() также указано, что вы должны использовать rmarkdown::render() для визуализации документов R Markdown v2.

Чтобы отключить кодировку base64, вы можете использовать параметр self_contained: no в метаданных YAML, например

---
output: 
  html_document: 
    self_contained: no
---
person Yihui Xie    schedule 16.09.2015
comment
Спасибо за ответ, yihui. Но я не думаю, что это решение работает. Отчет необходимо отправить по электронной почте. Когда он не самодостаточен, styles.css (как и другие вещи) теряется при отправке электронного письма. Обход, предложенный автором mailR, заключается в использовании knit2html, но это не работает для v2. - person Graeme; 17.09.2015
comment
Я не думаю, что у Pandoc есть способ отключить кодировку base64 только для изображений. Вы либо все кодируете, либо ничего. Вы можете выполнить пост-обработку несамостоятельного HTML-файла, хотя простого способа сделать это нет (вам придется искать все <script>, <link>, <img> и, возможно, другие теги в HTML, и выполнять кодирование вручную ). - person Yihui Xie; 17.09.2015
comment
Я думаю, что было бы проще использовать knit2html, а затем выполнить постобработку, чтобы развернуть инструкции {.ClassName} в ‹div class = ClassName› ... ‹/div›. Я займусь этим. - person Graeme; 18.09.2015

Обходной путь / решение, которое я сделал, заключалось в установке параметра:

#------------------
markdownToHTML("MyReport.Rmd", output="MyReport.html", options=c("toc", "use_xhtml", "smartypants",  "mathjax", "highlight_code"))

send.mail(from = "[email protected]",
            to = c("[email protected]", 
                   "[email protected]"),
            subject = "Email with a Markdown document in HTML at the message body",
            body = "MyReport.html",
            html = TRUE,
            inline = TRUE,
            smtp = list(host.name = "localhost"),
            send = TRUE)
#------------------

(или выберите свой собственный набор параметров для опций markdownToHTML, при этом убедитесь, что вы не добавляете "base64_images")

Таким образом, мне удалось отправить html и получить отчет, который будет отображать в теле письма изображения, включенные в ваш отчет. Изображения были помещены в ту же папку, где был сгенерирован HTML.

Надеюсь, это поможет.

person Xavier de Pedro Puente    schedule 06.08.2018