How to send email in R

RLang tutorial for sending emails over SMTP.

R Lang is a powerful programming language for mathematical modeling and statistical analysis. But did you know R can also be used to send emails? This is a useful feature and allows programmers and scientists to sent alerts and dataset results via email from with r scripts and RStudio. In this post we'll cover two popular methods for sending email in R.

Setup your environment

Install RLang by downloading an official distribution or by using a package manager. On OSX you can use Brew to install R like so:

brew install r

Next we can verify r is installed and functioning by running the RScript command from a terminal or command line. Verify RScript installation with the version argument

Rscript --version

RLang SMTP libraries

In order to send email in r we need to install some packages. The main packages we will cover in this post are:

  • sendmailR
  • blastula
  • httr

Each library has pros and cons and we will go over each to help you decide which package to use when sending an email.

Installing packages

To install packages in R lang we use the install.packages function. Run the RScript commands below to install all the packages we need:

Rscript -e 'install.packages("sendmailR",repos="http://cran.r-project.org")'
Rscript -e 'install.packages("httr",repos="http://cran.r-project.org")'
Rscript -e 'install.packages("blastula",repos="http://cran.r-project.org")'

This will make our desired packages available in our R code when calling the library function.

Send email with sendmailR

The sendmailR package is a popular library for sending email to an SMTP server. It has good support for most formats but does not accept authentication. We can still use sendmailR to send emails to SMTP servers but the emails will be delivered from our own machine via SMTP and not through an MTA mail transfer agent. This is fine for many use cases.

Pros

Easy setup for automated email sending with no user input.

Cons

Does not support authentication. For sending with authentication use the blastula package covered in the next section.

Example usage

Create a new R script and import the sendmailR library plus httr for http requests.

library(httr)
library(sendmailR)

Then send using the sendmail command:

# Now send an email to the address
from <- "<my@sender.com>" 
to <- address
subject <- "Send email with R!"
body <- "Wow, R can do everything."
sendmail(from,to,subject,body,control=list(smtpServer=host,smtpPort=port))

Send with Blastula

Another great package for emailing in Rlang is blastula. In contrast to sendmailR it supports SMTP authentication too meaning we can send emails through an SMTP server that we control.

Pros

Support MTA mail transfer with authentication (username and password).

Cons

Requires a credentials file or user input to enter password. For this reason it may not be suitable for automated scripting.

Example usage

First import blastula:

library(httr)
library(blastula)

Then compose and send an email:

email <- compose_email(
  body = md(c("Test email"))
)
print (paste("Enter password when prompted", password))
smtp_send(
  email = email,
  from = email_address,
  to = email_address,
  credentials = creds(
    host = host,
    port = port,
    user = username
  )
)

Testing email sending

If you wish to send emails in R and test the results try MailSlurp. You can create unlimited test email accounts and trap outbound email messages before they are sent. Create a free account today to get started.