web-dev-qa-db-ja.com

Rマークダウンレポートを電子メールの本文で送信する方法

更新:Brandon Bertelsenの答え

ブランドンの答えは、次の出力を生成します。 Rstudioのようにニーステーブルやハイライトコードを生成せず、Unicodeを使用した一部のhtmlファイルでクラッシュするため、電子メールレポートの自動化には使用していません。

私の現在のアプローチは、Rstudioを使用してhtmlにコンパイルし、html文書をchromeで開いてから、html文書をgmailにコピーして貼り付けることです。これは非常にうまく機能します。この要点を参照してください: https://Gist.github.com/nelsonauner/a68b5a808c232ce7817e

enter image description here

元の質問:

Rマークダウンドキュメントを電子メールの本文として送信する簡単な方法はありますか。そのため、電子メールの本文はRstudioの「ニットHTML」を使用した結果に似ていますか?

knitrrmarkdown、および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)
```

デフォルトのbase64エンコーディングはmailRで動作しないため、self_contained: noを使用しています( this SO post )でYihuiが推奨)

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)

両方のメールが正常に送信されます。

ニットされたメールは次のようになります。


knitted and emailed report


rmarkdownメールは次のようになります。 (javascriptファイルの束も含まれていることに注意してください-それらを削除するには、いくつかのスクリプトを作成する必要があると思います)


enter image description here


しかし、どちらもRstudioの "Knit as HTML"から生成されるレポートのように見栄えがよく、次のようになります。

enter image description here

助言がありますか?

真の修正には、JavaScriptファイルを削除しながら、CSSスタイリングをメールに優しい方法で組み込むHTMLファイルのいくつかの後処理が必要になると思います。

ここでは、knitrパッケージを使用します。

不明な点がある場合はお知らせください。質問を改善します。

関連するSO投稿:

RにはRMarkdown v2 htmlファイルを電子メールの本文として送信する方法があります

mailR:電子メールの本文としてrmarkdownドキュメントを送信する方法?

49
Nelson

主な問題は、メールリーダーがコードを削除し、外部からのインポートを許可しないことです。基本的なCSSサポートを取得するための最善の戦略は、インラインスタイルを使用して一貫したビューを作成することです。すぐに戻ります。

まず、Rmdドキュメントを少し異なる方法でセットアップして、余分なjavascriptファイルをすべて除外する必要があります。 themehighlight、および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 a python package残念ながら、それらはどれもブートストラップのような非常に複雑なCSSをサポートしません。

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)

免責事項:マイレージは、どのメールリーダーがターゲットかによって大きく異なる場合があります

13