Join GitHub today
GitHub is home to over 50 million developers working together to host and review code, manage projects, and build software together.
Sign up| --- | |
| title: "Sending Messages With Gmailr" | |
| output: rmarkdown::html_vignette | |
| vignette: > | |
| %\VignetteEngine{knitr::rmarkdown} | |
| %\VignetteIndexEntry{Sending Messages With Gmailr} | |
| %\usepackage[utf8]{inputenc} | |
| --- | |
| ```{r, include=FALSE} | |
| library(gmailr) | |
| ``` | |
| ## Constructing a MIME message | |
| ### Text | |
| First we will construct a simple text only message | |
| ```{r sending_messages_simple} | |
| text_msg <- gm_mime() %>% | |
| gm_to("james.f.hester@gmail.com") %>% | |
| gm_from("me@somewhere.com") %>% | |
| gm_text_body("Gmailr is a very handy package!") | |
| ``` | |
| You can convert the message to a properly formatted MIME message using `as.character()`. | |
| ```{r sending_messages_simple_print} | |
| strwrap(as.character(text_msg)) | |
| ``` | |
| ### HTML | |
| You can also construct html messages. It is customary to provide a text | |
| only message along with the html message, but with modern email clients this is | |
| not strictly necessary. | |
| ```{r sending_messages_html} | |
| html_msg <- gm_mime() %>% | |
| gm_to("james.f.hester@gmail.com") %>% | |
| gm_from("me@somewhere.com") %>% | |
| gm_html_body("<b>Gmailr</b> is a <i>very</i> handy package!") | |
| ``` | |
| ### Attachments | |
| You can add attachments to your message in two ways. | |
| 1. If the data is in a file, use `gm_attach_file()`. The mime type is | |
| automatically guessed by `mime::guess_type`, or you can specify it yourself | |
| with the `type` parameter. | |
| ```{r sending_messages_attachments_2} | |
| write.csv(file = "iris.csv", iris) | |
| msg <- html_msg %>% | |
| gm_subject("Here are some flowers") %>% | |
| gm_attach_file("iris.csv") | |
| ``` | |
| 2. If the data are already loaded into R, you can use `gm_attach_part()` to attach the binary data to your file. | |
| ```{r sending_messages_attachments_1} | |
| msg <- html_msg %>% | |
| gm_attach_part(part = charToRaw("attach me!"), name = "please") | |
| ``` | |
| ### Including images | |
| You can also add use attached images in HTML by setting the Content ID feature | |
| of mime emails. This can be done by referencing the image via a `<img | |
| src=cid:xyz>` tag using the `id` argument of `send_file()`. The tag value can | |
| by any unique identifier. E.g. here is an example of including a ggplot2 image | |
| ```{r} | |
| # First create a plot to send, and save it to mtcars.png | |
| mtcars$gear <- as.factor(mtcars$gear) | |
| png("mtcars.png", width = 400, height = 400, pointsize = 12) | |
| with(mtcars, | |
| plot(hp, | |
| mpg, | |
| col = as.factor(gear), | |
| pch = 19, | |
| xlab = "Horsepower", | |
| ylab = "Miles / gallon" | |
| ) | |
| ) | |
| legend("topright", title = "# gears", | |
| pch = 19, | |
| col = seq_along(levels(mtcars$gear)), | |
| legend = levels(mtcars$gear) | |
| ) | |
| dev.off() | |
| # Next create an HTML email that references the plot as 'foobar' | |
| email <- gm_mime() %>% | |
| gm_to('someaddress@somewhere.com') %>% | |
| gm_from("someaddress@somewhere.com") %>% | |
| gm_subject("Cars report") %>% | |
| gm_html_body( | |
| '<h1>A plot of <b>MotorTrend</b> data <i>(1974)</i></h1> | |
| <br><img src="cid:foobar">') %>% | |
| gm_attach_file("mtcars.png", id = "foobar") | |
| ``` | |
| ```{r, include = FALSE} | |
| unlink("mtcars.png") | |
| ``` | |
| ## Uploading | |
| ### Create Draft | |
| You can upload any mime message into your gmail drafts using `gm_create_draft()`. | |
| Be sure to give yourself at least `compose` permissions first. | |
| ```{r sending_messages_create_draft, eval=FALSE} | |
| gm_create_draft(file_attachment) | |
| ``` | |
| ### Insert | |
| This inserts the message directly into your mailbox, bypassing gmail's default | |
| scanning and classification algorithms. | |
| ```{r sending_messages_insert_message, eval=FALSE} | |
| gm_insert_message(file_attachment) | |
| ``` | |
| ### Import | |
| This imports the email as though it was a normal message, with the same | |
| scanning and classification as normal email. | |
| ```{r sending_messages_file_attachment, eval=FALSE} | |
| gm_insert_message(file_attachment) | |
| ``` | |
| ## Sending | |
| ### Draft | |
| `gm_send_draft()` sends an email using the `draft_id` of an existing draft | |
| (possibly created with `gm_create_draft()`). | |
| ```{r sending_messages_send_draft, eval=FALSE} | |
| my_drafts <- gm_drafts() | |
| gm_send_draft(gm_id(my_drafts, "draft_id")[1]) | |
| ``` | |
| ### Message | |
| You can also send an email message directly from a `mime` object using `gm_send_message()`. | |
| ```{r sending_messages_send_message, eval=FALSE} | |
| gm_send_message(file_attachment) | |
| ``` | |
| ```{r sending_messages_clenup, include=FALSE} | |
| unlink("iris.csv") | |
| ``` | |
| ## Troubleshooting | |
| ### Gmail API error 400: Mail service not enabled | |
| It is possible to have a high-functioning Google account that does not have | |
| Gmail enabled. For example, your account might be fully operational with | |
| respect to Google Drive and yet have no mail capabilities. Such an account | |
| cannot be used with the Gmail API and therefore with `gmailr`. However, you | |
| will still be able to complete the `gmailr` authorization process via | |
| `gmail_auth()`. The problem will only reveal itself upon the first attempt to | |
| use the API and it will look something like this: | |
| ``` | |
| Error in gmailr_POST(c("messages", "send"), user_id, class = "gmail_message", : | |
| Gmail API error: 400 | |
| Mail service not enabled | |
| ``` | |
| You can confirm the account's lack of mail capability by visiting | |
| <https://mail.google.com/mail/> while logged in. If you don't already have | |
| Gmail, this link gives you the option of adding mail to your existing account | |
| or creating a new, mail-capable account. | |