How to send R markdown report in body of email?
The main problem is that email readers strip your code and don't allow external imports. To get basic CSS support, the best strategy is to use inline styles to have a consistent view. We'll circle back to that in a minute.
First, you have to setup your Rmd document a little differently so it excludes all the extra javascript files. theme
, highlight
and mathjax
should all be null
. Notice, I've added a css
attribute.
---
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
comes from http://foundation.zurb.com/emails. I recommend using this as your base theme.
There are a number of different scripts you can use to "inline" your css (that's a verb), I've included instructions here for using premailer a python package. Unfortunately, none of them will support very complicated CSS like bootstrap. So you'll just have to make do with your own style built up using ink or whatever as your foundation.
You may need to install some elements, for me on Ubuntu:
sudo apt-get install python-pip libxslt1-dev
sudo pip install premailer
Now, you can do something like this.
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)
DISCLAIMER: Your mileage may vary wildly depending on which email reader is your target
Updated Dec 2019
R Studio has released a email-specific package blastula
. I find that this does a good job at inlining CSS for emails.
https://github.com/rich-iannone/blastula