当前位置:  开发笔记 > 编程语言 > 正文

如何在电子邮件正文中发送R降价报告?

如何解决《如何在电子邮件正文中发送R降价报告?》经验,为你挑选了1个好方法。

更新:Brandon Bertelsen的回答:

布兰登的答案产生以下输出.它不会像Rstudio那样产生漂亮的表格或突出显示代码,并且它会在一些带有unicode的html文件上崩溃,因此我不会使用它来自动化我的电子邮件报告.

我目前的方法是使用Rstudio编译为html,在chrome中打开html文档,然后将html文档复制并粘贴到gmail中.这很好用,请看这个要点:https://gist.github.com/nelsonauner/a68b5a808c232ce7817e

在此输入图像描述

原始问题:

是否有一种简单的方法可以将R降价文档作为电子邮件正文发送,以便电子邮件的正文与使用Rstudio的"编织HTML"的结果类似?

这里有一个基本的可重复使用例子knitr,rmarkdownmailR

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在此SO帖子中推荐)

knit_and_send.R

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

library(mailR)

send.mail(from = "me@gmail.com",
          to = "me@gmail.com",
          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 = "me@gmail.com",
          to = "me@gmail.com",
          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的"Knit as HTML"报告那样好看,它看起来像这样:

在此输入图像描述

有什么建议?

我认为一个真正的修复可能涉及一些html文件的后处理,它以一种电子邮件友好的方式结合css样式,同时删除javascript文件.

现在,我将使用该knitr包.

如果问题不清楚,请告诉我,我会改进这个问题.

相关的SO帖子:

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

mailR:如何在电子邮件中将rmarkdown文件作为正文发送?



1> Brandon Bert..:

主要问题是电子邮件阅读器剥离您的代码并且不允许外部导入.要获得基本的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包的说明.不幸的是,它们都不会像bootstrap那样支持非常复杂的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 = "me@gmail.com",
  to = "me@gmail.com",
  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)

免责声明:根据您的目标电子邮件阅读器,您的里程可能会有很大差异

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有