如何发送gmail邮件_如何从R和Gmail发送电子邮件

  • Post author:
  • Post category:其他


如何发送gmail邮件

在您的R人生的某个时刻,您可能希望与不使用R的同事共享分析结果。 有很多方法可以做到这一点。 最简单(也是最便宜)的方法之一是通过电子邮件发送结果。

但它是一种悲哀自动化您的整个分析流程,仅手工Craft.io,并在年底发送电子邮件。 幸运的是,您不必这样做。 有几个R软件包,可让您直接从R脚本发送电子邮件。 在本文中,我将演示其中的一个:Jim Hester的

gmailr

,他现在是RStudio的软件工程师。

显然,您需要一个Gmail帐户,如果您没有Gmail帐户,则可以免费设置。 然后,在可以使用R中的帐户之前,您需要将其设置为可进行API访问。 这是如何做。

转到

console.developers.google.com

(是的,这是一个子子网域)。 如果您还没有开发人员项目,则会要求您创建一个。

在信息中心的顶部,您应该看到“启用API和服务”的选项。 点击那个。


在Google Developers Console仪表板中启用API


沙龙·马克斯(IDG)

您可以选择在Google Developers Console仪表板中启用API。

接下来,您将要搜索Gmail API。 单击该,然后单击启用。

R脚本将需要凭据,因此请单击右上角的创建凭据。


用于为Gmail API创建授权凭据的选项。


沙龙·马克斯(Sharon Machlis)IDG

为Gmail API创建授权凭证。

根据Jim Hester的指示,我们需要一个客户ID,因此我将选择客户ID。


为Gmail API创建客户端ID


沙龙·马克斯(IDG)

创建一个客户端ID。

现在,它要求一个应用程序类型。 由于这里没有“ R脚本”,因此我想选择“其他”。 但是所有单选按钮均显示为灰色。 那是因为我还没有配置同意屏幕。 如果您专注于单选按钮选择,那么这很容易错过; 在右上角。 点击那个。


用于配置同意屏幕的按钮


沙龙·马克斯(IDG)

选择应用程序类型之前,请不要忘记配置您的同意屏幕。

您的电子邮件地址应该已经在同意屏幕中。 唯一的其他要求是应用程序的名称。 您可以随便叫它。

吉姆说,其余的默认设置都可以,请向下滚动并保存。 现在,您应该能够选择其他应用程序类型,为应用程序命名,然后单击创建。

然后,控制台应为您提供客户端ID和客户端密码。 您可以根据需要将它们添加到R环境中来使用它们。 但是Jim建议改为下载JSON文件。 您可以将其下载到R项目的工作目录,并记住为其指定的文件名。


用于下载JSON文件的图标


沙龙·马克斯(IDG)

您可以使用Gmail API凭据下载JSON文件。

这样就完成了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邮件