我正在尝试使用SendMailR发送数据帧。我可以将它作为附件发送,格式相当合理。但是,我想在电子邮件正文中发送数据帧。我尝试了capture.output,print,sprintf,但我甚至无法将格式关闭。
e.g。我尝试了以下语法
for (i in 1:nrow(df)){
MSG = c(MSG,rownames(df)[1],as.character(unlist(df[i,])),'\n')
}
MSG = sprintf('%-10s',MSG)
sendmail(from,to,subject,msg = list(MSG,attachment1,attachment2 ... ))
换句话说,我认为可能需要将我的数据帧转换为带有/ n和sprintf('s-10%')等的格式并将其存储在MSG中。有人能指出我正确的方向吗?
答案 0 :(得分:16)
虽然发送带有sendmailR
的HTML邮件并不简单,但可能是基于去年与软件包作者的邮件讨论(再次感谢Olaf Mersmann的帮助) - 简单地覆盖了{{1}标头E.g:
Content-Type
另一方面,HTML没有真正的需要以人类可读的格式呈现表格或msg <- mime_part('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>HTML demo</title>
<style type="text/css">
</style>
</head>
<body>
<h1>HTML demo</h1>
</body>
</html>')
## Override content type.
msg[["headers"]][["Content-Type"]] <- "text/html"
from <- '<foo@example.com>'
to <- "<bar@example.com>"
subject <- "HTML test"
body <- list(msg)
sendmail(from, to, subject, body, ...)
。例如有可以将R对象转为降价的data.frame
包或我的ascii
pkg。快速演示:
pander
如果要将其连接到电子邮件正文,请使用> library(pander)
> panderOptions('table.split.table', Inf)
> pander(head(iris, 3))
-------------------------------------------------------------------
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
-------------- ------------- -------------- ------------- ---------
5.1 3.5 1.4 0.2 setosa
4.9 3 1.4 0.2 setosa
4.7 3.2 1.3 0.2 setosa
-------------------------------------------------------------------
> pander(head(iris, 3), style = 'grid')
+----------------+---------------+----------------+---------------+-----------+
| Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Species |
+================+===============+================+===============+===========+
| 5.1 | 3.5 | 1.4 | 0.2 | setosa |
+----------------+---------------+----------------+---------------+-----------+
| 4.9 | 3 | 1.4 | 0.2 | setosa |
+----------------+---------------+----------------+---------------+-----------+
| 4.7 | 3.2 | 1.3 | 0.2 | setosa |
+----------------+---------------+----------------+---------------+-----------+
代替返回字符向量而不是写入控制台。还有一些其他可用的表pander.return
,还有一些有用的style
,例如设置小数点,日期格式等:http://rapporter.github.io/pander/
答案 1 :(得分:6)
library&#34; xtable&#34;将有助于将数据框作为表格附加到电子邮件中。试试这个
library(xtable)
body=print(xtable(dataframe,caption = "Heading for the table"), type="html", caption.placement = "top")
答案 2 :(得分:1)
作为 sendmailR
的替代方案,这里有一个示例,使用 gt
包将表格转换为 HTML,并使用 blastula
包发送电子邮件。两个包都来自 RStudio:blastula 和 gt。
library(blastula)
library(gt)
tbl_html <-
mtcars %>%
gt() %>%
as_raw_html()
email <-
compose_email(
body = blocks(tbl_html)
)
email %>%
smtp_send(
to = 'recipient@email.com',
from = 'sender@gmail.com',
subject = "Test email with table",
credentials = creds_file("gmail_creds")
)
要设置首次使用的凭据(在本例中使用 gmail 地址):
create_smtp_creds_file(
file = "gmail_creds",
user = 'sender@gmail.com',
provider = "gmail"
)
您也可以在正文中使用 Markdown。