首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gmailr,无需在R中选择预先授权的帐户

Gmailr,无需在R中选择预先授权的帐户
EN

Stack Overflow用户
提问于 2020-03-03 20:13:31
回答 2查看 944关注 0票数 5

在R脚本中,当我尝试发送包含以下代码的电子邮件时。它会询问gmailr包是否请求访问您的Google帐户。选择预先授权的帐户或输入“0”以获取新令牌。按Esc/Ctrl +C组合键中止。

1: email1@gmail.com

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

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

发布于 2020-06-30 14:21:06

这是无人值守/非交互式身份验证的问题。我将尝试给出这个过程的概要,因为它对我来说是有效的-和你的问题完全一样,这个问题已经消失了。正如它在gmailr/readme中所述-您下载json凭证,交互地进行一次身份验证,并将凭证复制到您喜欢的任何位置。你可以通过获取凭证,甚至更好--只需在https://console.developers.google.com上创建一个项目,添加gmail API,然后为桌面应用程序创建OAuth凭证。后一种方法的好处是您将确切地知道所有组件的位置,并且能够重复您想要的次数。为此,我创建了一个单独的google电子邮件地址。然后将OAuth“客户端秘密”.json文件下载到您的项目目录中,并将其命名为credentials.json (或您喜欢的任何其他json名称)。然后,当您在项目目录中时,您将在Rstudio中以交互方式运行以下命令进行身份验证:

代码语言:javascript
复制
gm_auth_configure(path  = "credentials.json")
gm_auth(email = TRUE, cache = ".secret")

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

代码语言:javascript
复制
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令牌就会随之而来。令牌是gmail压缩的二进制文件,gmail在“身份验证舞蹈”期间以加密方式创建并存放在缓存中。与一个G-project配对的一个地址提供一个令牌。人们可能会在一个R项目中使用多个地址和google项目,但到目前为止,我还没有看到需要这样做。

票数 4
EN

Stack Overflow用户

发布于 2020-05-03 04:19:14

只需使用gm_auth(email = "email1@gmail.com")添加“发件人电子邮件地址”即可

代码语言:javascript
复制
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)```
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60507013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档