Подтвердить что ты не робот

Как отправить отчет R markdown в теле письма?

обновление: Brandon Bertelsen отвечает:


Ответ Брэндона дает следующий результат. Он не создает приятные таблицы или выделяет код, например Rstudio, и он сбой в некоторых html файлах с помощью unicode, поэтому я не использую его для автоматизации моих сообщений электронной почты.

Мой текущий подход заключается в компиляции с Rstudio в html, откройте html-документ в chrome, а затем скопируйте и вставьте html-документ в gmail. Это работает очень хорошо, см. Этот принцип: https://gist.github.com/nelsonauner/a68b5a808c232ce7817e

введите описание изображения здесь

оригинальный вопрос:


Есть ли простой способ отправить документ с отметкой R как тело письма, так что тело письма похоже на результаты использования Rstudio "Knit HTML"?

Здесь приведен базовый воспроизводимый пример с использованием knitr, rmarkdown и mailR

example.Rmd

---
title: "Report for email"
output: 
  html_document: 
    self_contained: no
---

```{r}
summary(cars)  
```

You can also embed plots, for example:

```{r, echo=FALSE}
plot(cars)
```

Я использую self_contained: no, так как кодировка base64 по умолчанию не работает с mailR (рекомендуется Yihui в this SO post)

knit_and_send.R

# compile using rmarkdown
library(rmarkdown)
rmarkdown::render("example.Rmd")

library(mailR)

send.mail(from = "[email protected]",
          to = "[email protected]",
          subject = "R Markdown Report - rmarkdown",
          html = T,
          inline = T,
          body = "example.html",
          smtp = list(host.name = "smtp.gmail.com", port = 465, user.name = "me", passwd = "password", ssl = T),
          authenticate = T,
          send = T)

#compile using knitr
library(knitr)
knit2html("example.Rmd",options="")

send.mail(from = "[email protected]",
          to = "[email protected]",
          subject = "R Markdown Report - knitr",
          html = T,
          inline = T,
          body = "example.html",
          smtp = list(host.name = "smtp.gmail.com", port = 465, user.name = "me", passwd = "password", ssl = T),
          authenticate = T,
          send = T)

Оба письма успешно отправляются.

Вязаная электронная почта выглядит следующим образом:


вязаный и отправленный по электронной почте отчет


и электронная почта rmarkdown выглядит так. (Обратите внимание, что он также включает в себя кучу файлов javascript - я думаю, мне пришлось бы написать некоторые скрипты, чтобы удалить их)


введите описание изображения здесь


Но ни один из них не выглядит таким же приятным, как отчет, созданный Rstudio "Вязать как HTML", который выглядит следующим образом:

введите описание изображения здесь

Любые предложения?

Я думаю, что истинное исправление может включать некоторую постобработку html файла, который включает стиль CSS в удобном для электронной почты способе, удаляя файлы javascript.

В настоящее время я использую пакет knitr.

Пожалуйста, дайте мне знать, если что-то неясно, и я улучшу вопрос.

Соответствующие сообщения SO:

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

mailR: как отправить документы rmarkdown как тело по электронной почте?

4b9b3361

Ответ 1

Основная проблема заключается в том, что читатели электронной почты блокируют ваш код и не разрешают внешний импорт. Чтобы получить базовую поддержку CSS, лучшей стратегией является использование встроенных стилей для последовательного представления. Через минуту мы вернемся к этому.

Во-первых, вам нужно немного настроить свой Rmd-документ, чтобы исключить все дополнительные файлы javascript. theme, highlight и mathjax должны быть null. Обратите внимание: я добавил атрибут css.

---
title: "Report for email"
output: 
  html_document: 
    self_contained: no
    theme: null
    highlight: null
    mathjax: null
    css: ink.css
---

```{r}
summary(cars)  
```

You can also embed plots, for example:

```{r, echo=FALSE}
plot(cars)
```

ink.css происходит от http://foundation.zurb.com/emails. Я рекомендую использовать это в качестве базовой темы.

Существует несколько различных сценариев, которые вы можете использовать для "встроенного" вашего css (этого глагола), здесь я привел инструкции для использования premailer. пакет python. К сожалению, ни один из них не будет поддерживать очень сложные CSS, такие как bootstrap. Таким образом, вам просто нужно будет сделать свой собственный стиль, созданный чернилами или как бы фундаментом.

Вам может потребоваться установить некоторые элементы, для меня на Ubuntu:

sudo apt-get install python-pip libxslt1-dev
sudo pip install premailer

Теперь вы можете сделать что-то подобное.

library(rmarkdown)
library(mailR)
rmarkdown::render("example.Rmd")
system("python -m premailer -f example.html -o output.html")


send.mail(
  from = "[email protected]",
  to = "[email protected]",
  subject = "R Markdown Report - rmarkdown",
  html = T,
  inline = T,
  body = "output.html",
  smtp = list(
     host.name = "smtp.gmail.com", 
     port = 465, 
     user.name = "me",    
     passwd = "password", 
     ssl = T),
  authenticate = T,
  send = T)

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Ваш пробег может сильно различаться в зависимости от того, какой почтовый ящик является вашей целью.