这是无人值守/非交互式身份验证问题。 我将尝试简要介绍该过程,因为它对我有用 - 问题,就像你的一样,消失了。正如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 项目中使用多个地址和谷歌项目,但到目前为止我还没有看到需要这样做。