如何发送gmail邮件_如何从R和Gmail发送电子邮件
如何发送gmail邮件 在您的R人生的某个时刻,您可能希望与不使用R的同事共享分析结果。 有很多方法可以做到这一点。 最简单(也是最便宜)的方法之一是通过电子邮件发送结果。但它是一种悲哀自动化您的整个分析流程,仅手工Craft.io,并在年底发送电子邮件。 幸运的是,您不必这样做。 有几个R软件包,可让您直接从R脚本发送电子邮件。 在本文中,我将演示其中的一个:Jim Hester的gma...
如何发送gmail邮件
在您的R人生的某个时刻,您可能希望与不使用R的同事共享分析结果。 有很多方法可以做到这一点。 最简单(也是最便宜)的方法之一是通过电子邮件发送结果。
但它是一种悲哀自动化您的整个分析流程,仅手工Craft.io,并在年底发送电子邮件。 幸运的是,您不必这样做。 有几个R软件包,可让您直接从R脚本发送电子邮件。 在本文中,我将演示其中的一个:Jim Hester的gmailr ,他现在是RStudio的软件工程师。
显然,您需要一个Gmail帐户,如果您没有Gmail帐户,则可以免费设置。 然后,在可以使用R中的帐户之前,您需要将其设置为可进行API访问。 这是如何做。
转到console.developers.google.com (是的,这是一个子子网域)。 如果您还没有开发人员项目,则会要求您创建一个。
在信息中心的顶部,您应该看到“启用API和服务”的选项。 点击那个。
接下来,您将要搜索Gmail API。 单击该,然后单击启用。
R脚本将需要凭据,因此请单击右上角的创建凭据。
根据Jim Hester的指示,我们需要一个客户ID,因此我将选择客户ID。
现在,它要求一个应用程序类型。 由于这里没有“ R脚本”,因此我想选择“其他”。 但是所有单选按钮均显示为灰色。 那是因为我还没有配置同意屏幕。 如果您专注于单选按钮选择,那么这很容易错过; 在右上角。 点击那个。
您的电子邮件地址应该已经在同意屏幕中。 唯一的其他要求是应用程序的名称。 您可以随便叫它。
吉姆说,其余的默认设置都可以,请向下滚动并保存。 现在,您应该能够选择其他应用程序类型,为应用程序命名,然后单击创建。
然后,控制台应为您提供客户端ID和客户端密码。 您可以根据需要将它们添加到R环境中来使用它们。 但是Jim建议改为下载JSON文件。 您可以将其下载到R项目的工作目录,并记住为其指定的文件名。
这样就完成了Google方面的设置,终于可以使用一些R代码了。
首先,请确保您已安装gmailr软件包。 它在CRAN上可用,因此您可以使用install.packages("gmailr")
。 然后使用library(gmailr)
在脚本中加载包。
在执行其他操作之前,您需要设置工作的R会话以使用下载的JSON凭证文件。 您可以使用use_secret_file()
函数,并将JSON文件的名称作为参数来执行此操作。 如果我调用JSON凭证文件DoMoreWithR.json,则命令为
use_secret_file("DoMoreWithR.json")
实际上,发送消息非常容易。
对于某些示例数据,我下载了美国的每月失业率,然后创建了一个名为lasts_msg的文本字符串,其中包含有关最新失业率的信息。 请注意,在下面的代码中,我使用胶水包来组装我想要的消息字符串,但这是因为我喜欢这样做。 paste()
或paste0()
同样有效。
您可以在电子邮件中使用任何R生成的数据。 如果您想跟我一起学习,请参考以下代码(您需要安装pacman软件包):
pacman::p_load(quantmod, glue, xts, dplyr, ggplot2)
getSymbols("UNRATE", src="FRED")
unemployment <- coredata(UNRATE)
month_starting <- index(UNRATE)
series_length <- length(unemployment)
latest_msg <- glue("The latest US unemployment rate was {unemployment[series_length]}, in the month starting {month_starting[series_length]}. That's {unemployment[series_length] - unemployment[series_length - 1]} percentage points difference from the prior month.")
接下来,我想创建一个MIME电子邮件对象,然后添加一个to地址,一个from地址,主题文本和我的消息正文。
my_email_message <- mime() %>%
to("some_email_address@somedomain.com") %>%
from("domorewithr@gmail.com") %>%
subject("My test message") %>%
text_body(latest_msg)
如果执行此操作,然后使用str(my_text_message)
检查my_email_message的结构,您会看到它是一个带有mime
类的列表。
创建MIME消息对象后,可以使用send_message()
函数发送它。 该参数只是我的MIME对象的名称,在本例中为my_email_message。 所以在这种情况下的完整命令是
send_message(my_email_message)
第一次运行send_message()时,可能会询问您是否要在R个会话之间缓存授权。 我建议你说是的。 首次运行此程序时,还会在浏览器中要求您授权R脚本使用您的Google帐户。
您可以使用gmailr做更多的事情。 一种选择是创建HTML消息,因此您可以使用粗体和斜体之类的标记。
在这里,我的消息正文包括类似HTML的段落标记以及粗体和斜体,然后将其发送到我的工作地址。
html_msg_text <- glue("<p>The latest US unemployment rate was
<b>{unemployment[series_length]}</b>, in the month starting
{month_starting[series_length]}. That's
{unemployment[series_length] - unemployment[series_length - 1]}
percentage points difference from the prior month.</p>
<p><i>Data from the U.S. Bureau of Labor Statistics.</i></p>")
my_html_message <- mime() %>%
to("sharon_machlis@idg.co") %>%
from("domorewithr@gmail.com") %>%
subject("My test message") %>%
html_body(html_msg_text)
send_message(my_html_message)
不幸的是,我不知道一种将R生成的图像直接直接包含在消息正文中的方法。 但是,将其中一个作为附件非常简单。
在下面的脚本顶部,我将失业率数据转换为具有2000年及以后版本的指标的数据框,因此可以使用ggplot对其进行图形处理,然后将图形保存到文件中。
不过,代码的下一部分是了解电子邮件的重要内容。 首先,像以前一样,我使用胶水包为我的消息文本创建文本字符串。 新功能是创建我的MIME对象的最后两行代码。 最后一行attach_file()
将我的PNG文件附加到电子邮件中。 如果希望文本显示在电子邮件正文中,则前一行很重要。 如果不同时使用text_body()
和 attach_part()
作为正文文本,则附加文件时文本不会显示。 只是要记住的东西。
然后,我可以使用相同的send_message()
函数发送它。
un_df <- data.frame(month_starting, unemployment) %>%
filter(month_starting >= as.Date("2000-01-01")) %>%
rename(unemployment = UNRATE)
mygraph <- ggplot(un_df, aes(month_starting, unemployment)) +
geom_line() +
ggtitle("US Monthly Unemployment") +
xlab("Month Starting") +
ylab ("")
ggsave("unemployment_graph.png")
msg_text <- glue("The latest US unemployment rate was {unemployment[series_length]}, in the month starting {month_starting[series_length]}. That's {unemployment[series_length] - unemployment[series_length - 1]} percentage points difference from the prior month. A graph of the data since January 2000 is attached.")
message2 <- mime() %>%
to("sharon_machlis@idg.com") %>%
from("domorewithr@gmail.com") %>%
subject("My text message with attached graph") %>%
text_body(msg_text) %>%
attach_part(msg_text) %>%
attach_file("unemployment_graph.png")
send_message(message2)
如果需要,可以在发送Gmail之前使用函数create_draft()
在Gmail帐户中创建草稿邮件。 在这种情况下, create_draft(message2)
将创建我的文件附件消息的草稿。
如果您想了解所有操作的效果,请查看本文顶部的视频。 有关R的更多技巧,请访问InfoWorld上的“用R做更多视频”视频页面,或查看“用R做更多YouTube”播放列表 。
翻译自: https://www.infoworld.com/article/3398701/how-to-send-email-from-r-and-gmail.html
如何发送gmail邮件
更多推荐
所有评论(0)