Mail merge from R using markdown documents and gmail.
yaml
header to specify the subject line of the
emailglue
to replace {}
tagsgmailr
Note: Right now, the only supported email back end is
gmailr
(see https://gmailr.r-lib.org/).
Install the package from CRAN:
install.packages("mailmerge")
Install the dev version from https://github.com/andrie/mailmerge
::install_github("andrie/mailmerge") remotes
At the moment only gmail is supported as the email back-end, using
the gmailr
package (https://github.com/r-lib/gmailr).
Before you use mail_merge()
it’s important to
authenticate against the gmail service, and you should use
gmailr::gm_auth()
to do this.
Construct a data frame with the content you want to merge into your email:
<- data.frame(
dat email = c("friend@example.com", "foe@example.com"),
first_name = c("friend", "foe"),
thing = c("something good", "something bad"),
stringsAsFactors = FALSE
)
Write the text of your email as a R markdown document. You can add
the subject line in the yaml header. Use {}
braces inside
the email to refer to the data inside your data frame. Expressions
inside these braces will be encoded by the
glue::glue_data()
function (See https://glue.tidyverse.org/).
<- '
msg ---
subject: "**Hello, {first_name}**"
---
Hi, **{first_name}**
I am writing to tell you about **{thing}**.
{if (first_name == "friend") "Regards" else ""}
Me
'
Then you can use mail_merge()
to embed the content of
your data frame into the email message. By default the email will be
shown in a preview window (in the RStudio viewer pane, if you use
RStudio).
To send the message, use send = "draft"
(to save in your
gmail drafts folder) or send = "immediately"
to send the
mail immediately.
library(mailmerge)
library(gmailr, quietly = TRUE, warn.conflicts = FALSE)
if (interactive()) {
# Note: you should always authenticate. The 'interactive()` condition only
# prevents execution on the CRAN servers
gm_auth()
}
%>%
dat mail_merge(msg)
#> Sent preview to viewer
if (interactive()) {
%>%
dat mail_merge(msg) %>%
print()
}