6

在 R 脚本中,当我尝试使用以下代码发送电子邮件时。它要求 gmailr 包请求访问您的 Google 帐户。选择一个预授权账户或输入“0”以获取新令牌。按 Esc/Ctrl + C 中止。

1:email1@gmail.com

无需在控制台中手动输入 1,我的 R 脚本如何自动选择我的预授权帐户并相应地发送电子邮件?

library(gmailr)
gm_auth_configure(path="C:/Users/Google Drive/email.json")

my_email_message <- gm_mime() %>%
  gm_to("email1@gmail.com") %>%
  gm_from("email1@gmail.com") %>%
  gm_subject("My test message") 

gm_send_message(my_email_message)
4

2 回答 2

4

这是无人值守/非交互式身份验证问题。 我将尝试简要介绍该过程,因为它对我有用 - 问题,就像你的一样,消失了。正如gmailr/readme中所述- 您下载 json 凭据,以交互方式进行身份验证,然后将凭据复制到您喜欢的任何地方。您可以通过python quickstart获得凭证,甚至更好——只需在https://console.developers.google.com上创建一个项目即可,向其中添加 gmail API,然后为桌面应用程序创建 OAuth 凭据。后一种方法的好处是您将确切地知道所有组件的位置,并且可以根据需要重复多次。为此,我创建了一个单独的谷歌电子邮件地址。然后,您将 OAuth “client-secret”.json文件下载到您的项目目录中并调用它credentials.json(或您喜欢的任何其他 json 名称)。然后,当您在项目目录中时,您将在 Rstudio 中以交互方式运行以下命令进行身份验证:

gm_auth_configure(path  = "credentials.json")
gm_auth(email = TRUE, cache = ".secret")

一个网页会弹出可怕的消息,但你会同意所有的,从那时起你将使用缓存。您刚刚在项目中创建的缓存.secret子目录(您可以为缓存目录指定任何名称)是可移植的 - 您可以将其复制credentials.json到您的闪亮服务器。一切都包含在您的项目目录中很方便。之后,您将需要在代码中添加几行 - 它们应该在命令之前,gm_send_message(your_email_prepared_with_gm_mime)并且无论您已将项目复制到哪台计算机,只要它具有gmailr并且gargle(这是一个 gmailr 依赖项)安装在哪台计算机R上,都不需要更多的交互式身份验证你的服务器:

gm_auth_configure(path  = "credentials.json")
options(
  gargle_oauth_cache = ".secret",
  gargle_oauth_email = "email_address_used_for_creds@gmail.com"
)
gm_auth(email = "email_address_used_for_creds@gmail.com")

# then compose your e-mail and send it

最后一个命令允许避免使用哪个帐户的对话。这有时会在第一次使用时弹出。 gmailr 自述文件很好地解释了它;如果您遇到困难,我的解释是鼓励您再次阅读。您还可以在https://gmailr.r-lib.org/index.html阅读 gmailr 参考资料- 它非常好。但我的猜测是——如果你已经按照这里的流程进行操作,你甚至不需要它。

关于缓存的注意事项:默认gargle(这是使 gmailr 发生身份验证的原因)缓存目录位于您的主目录的某个隐藏子目录中 - 因此它特定于您在该计算机上。但是,如果您将其设置为 R 项目的子目录,则整个 OAuth 过程将变为可移植的。只需复制您想要的项目目录和 OAuth 凭证对 - 缓存中的 json 文件和 OAuth 令牌将随之而来。令牌是 gmail 在“身份验证舞蹈”期间以加密方式创建并存放在缓存中的 gzip 二进制文件。与一个 G 项目配对的一个地址提供一个代币。一个人可能可以在一个 R 项目中使用多个地址和谷歌项目,但到目前为止我还没有看到需要这样做。

于 2020-06-30T06:21:06.147 回答
1

只需添加“来自电子邮件地址”gm_auth(email = "email1@gmail.com")

library(gmailr)
gm_auth_configure(path="C:/Users/Google Drive/email.json")
gm_auth(email = "email1@gmail.com")

my_email_message <- gm_mime() %>%
  gm_to("email1@gmail.com") %>%
  gm_from("email1@gmail.com") %>%
  gm_subject("My test message") 

gm_send_message(my_email_message)```
于 2020-05-02T20:19:14.213 回答