18  Office 文档

本章主要介绍办公文档 Word、演示报告 PowerPoint 和电子邮件 Email 三类应用。在 R 语言社区中,Quarto 文档支持输出 Word 和 PowerPoint 格式,blastula 包可以将 R Markdown 文档转化为电子邮件内容,从而实现代码化、可重复和批量化,提高工作效率。

18.1 Word 文档

18.2 PowerPoint 演示

18.3 电子邮件

Rahul Premraj 基于 rJava 包开发的 mailR 虽然还未在 CRAN 上正式发布,但是已得到很多人的关注,也被广泛的使用,目前作者已经不维护了,继续使用有一定风险。 RStudio 公司 Richard Iannone 新开发的 blastula 扔掉了 Java 的重依赖,更加轻量化、现代化,支持发送群组邮件。

18.3.1 curl

curl 包提供的函数 send_mail() 本质上是在利用 curl 软件发送邮件,举个例子,邮件内容如下:

From: "张三" <邮箱地址>
To: "李四" <邮箱地址>
Subject: 测试邮件

你好:

这是一封测试邮件!

将邮件内容保存为 mail.txt 文件,然后使用 curl 命令行工具将邮件内容发出去。

curl --url 'smtp://公司邮件服务器地址:开放的端口号' \
  --ssl-reqd --mail-from '发件人邮箱地址' \
  --mail-rcpt '收件人邮箱地址' \
  --upload-file data/mail.txt \
  --user '发件人邮箱地址:邮箱登陆密码'
注释

Gmail 出于安全性考虑,不支持这种发送邮件的方式,会将邮件内容阻挡,进而接收不到邮件。

18.3.2 blastula

下面以 blastula 包为例怎么支持 Gmail、Outlook、QQ 等邮件发送,先安装系统软件依赖,CentOS 8 上安装依赖

sudo dnf install -y libsecret-devel libsodium-devel

然后安装 keyringblastula

install.packages(c("keyring", "blastula"))

接着配置邮件帐户,这一步需要邮件账户名和登陆密码,配置一次就够了,不需要每次发送邮件的时候都配置一次

library(blastula)
create_smtp_creds_key(
  id = "outlook", 
  user = "zhangsan@outlook.com",
  provider = "outlook"
)

第二步,准备邮件内容,包括邮件主题、发件人、收件人、抄送人、密送人、邮件主体和附件等。

attachment <- "data/mail.txt" # 如果没有附件,引号内留空即可。
# 这个Rmd文件渲染后就是邮件的正文,交互图形和交互表格不适用
body <- "examples/html-document.Rmd" 
# 渲染邮件内容,生成预览
email <- render_email(body) |> 
  add_attachment(file = attachment)
email

最后,发送邮件

smtp_send(
  from = c("张三" = "xxx@outlook.com"), # 发件人
  to = c("李四" = "xxx@foxmail.com",
         "王五" = "xxx@gmail.com"), # 收件人
  cc = c("赵六" = "xxx@outlook.com"), # 抄送人
  subject = "这是一封测试邮件",
  email = email,
  credentials = creds_key(id = "outlook")
)

密送人实现群发单显,即一封邮件同时发送给多个人,每个收件人只能看到发件人地址而看不到其它收件人地址。

email <- compose_email(
  body = md("
Markdown 格式的邮件内容
")
)

smtp_send(
  from = c("发件人" = "xx@outlook.com"),
  to = c("收件人" = "xx@outlook.com"),
  bcc = c(
    "抄送人" = "xx@outlook.com"
    ),
  subject = "邮件主题",
  email = email,
  credentials = creds_key(id = "outlook")
)