r - 没有在 R 中选择预授权帐户的 Gmailr

标签 r gmailr

在 R 脚本中,当我尝试使用以下代码发送电子邮件时。它要求 gmailr 包请求访问您的 Google 帐户。选择预授权账户或输入“0”以获取新 token 。按 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)

最佳答案

这是无人值守/非交互式身份验证问题。 我将尝试简要介绍该过程,因为它对我有用 - 问题,就像你的一样,消失了。正如 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 一起复制到你的 Shiny 服务器。一切都包含在您的项目目录中很方便。之后你的代码中需要几行——它们应该在命令 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 Readme解释得很好;如果您遇到困难,我的解释是鼓励您再次阅读。您还可以在 https://gmailr.r-lib.org/index.html 上阅读 gmailr 引用。 - 这是相当不错的。但我的猜测是——如果你已经按照这里的流程进行操作,你甚至不需要它。
缓存注意事项:默认 gargle (这就是使 gmailr 发生身份验证的原因)缓存目录位于您的主目录的某个隐藏子目录中 - 因此它特定于您在该计算机上。但是,如果将其设置为 R 项目的子目录,则整个 OAuth 过程将变得可移植。只需复制您想要的项目目录和 OAuth 凭证对 - 缓存中的 json 文件和 OAuth token 将随之而来。 token 是 gmail 在“身份验证舞蹈”期间以加密方式创建并存放在缓存中的 gzip 二进制文件。与一个 G 项目配对的一个地址提供一个代币。一个人可能可以在一个 R 项目中使用多个地址和谷歌项目,但到目前为止我还没有看到需要这样做。

关于r - 没有在 R 中选择预授权帐户的 Gmailr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60507013/

相关文章:

R 试图让插入符/rfe 工作

r - 如何手动调整刻面大小

python - R中有z.fill函数吗

r - GmailR 不断要求重新验证——还有更好的选择吗?

r - 对在另一个函数中定义的函数使用相同的参数名称

r - 如何在ggplot2中制作具有锐利过渡的色标