【问题标题】:How can I set custom signatures across a domain Gmail API如何跨域 Gmail API 设置自定义签名
【发布时间】:2017-03-15 07:25:25
【问题描述】:

我想将我的 Google Apps 域中所有用户的签名设置为他们的姓名和职位。 通过我的研究,我发现做到这一点的唯一免费方法是使用 Gmail API。 通过使用https://developers.google.com/admin-sdk/directory/v1/quickstart/js 的快速入门指南,我设法获得了域中所有用户的列表(包含所需的信息、我想要设置签名的电子邮件地址、姓名、职位)。

在 listUsers 函数的末尾,我添加了 loadGmailApi 代码。 加载 api 后,它会运行一个名为 setSignatures 的函数。

function setSignatures() {
    var request = gapi.client.gmail.users.settings.sendAs.update({
        'userId': email,
        'sendAsEmail': email,
        'signature': '<strong style="color: rgb(230, 145, 56); font-family: arial, sans-serif; font-size: large;">' + name + '</strong>'
    });

    request.execute(function(resp) {
        console.log(resp);
    });
}

当变量“email”是我自己的时,这非常有效,但是当它是其他任何人时,我收到以下错误:403Delegation denied for 'myemail'。我是超级管理员。

我现在发现我需要使用服务帐户。 然后我完全按照本指南How to obtain Google service account access token javascript。 一个区别是授权我使用

gapi.auth.authorize({

而不是

gapi.analytics.auth.authorize({

因为我不需要分析 API。我希望这不会造成问题。我需要目录和 gmail API。 在上面链接中提供的代码的末尾,我像以前一样再次加载DirectoryApi() 并运行代码以再次获取所有用户信息。我什至无法设置签名,因为此时我收到一条错误消息:需要 401 登录。

因此,如果我使用自己的电子邮件尝试此操作,我会收到 403,而当我尝试服务帐户时,我会收到 401。它说需要登录,我该如何登录?我认为服务帐户实际上并没有登录,但我使用 JWT 来制作访问令牌。 我正在授权

gapi.auth.authorize({
    'serverAuth': {'access_token': token},
    'scope': 'https://www.googleapis.com/auth/admin.directory.user',
    'client_id': 'myClientID'
});

我做错了什么?请帮忙。我需要知道如何“登录”或使用服务帐户进行身份验证,以便更新签名。

【问题讨论】:

  • 您可能需要检查此document 中的所有要求,以验证您是否已完成执行 Google Apps 域范围授权授权所需的所有操作。 Gmail supports domain-wide delegation,如相关 SO 问题中所述。
  • 但请注意,您需要授予该服务帐户对您的工作域的访问权限,并且只有有权访问 Admin API 的用户才能访问 Admin SDK Directory API,因此您的服务帐户需要模拟其中之一用户访问 Admin SDK Directory API。希望这会有所帮助。

标签: javascript gmail-api service-accounts google-directory-api


【解决方案1】:

即使您是超级管理员,您也无法默认使用 gmail api 更改其他用户的电子邮件签名。

首先,您需要在 google 开发控制台中创建一个服务帐户并为该帐户添加域范围的委派。

之后,您转到您的 google 管理员并在 API 控制下添加具有所需范围的服务帐户。

然后你需要在你的 python 脚本中使用这些凭据。

基本上它的作用是,它允许您冒充其他用户并更改电子邮件签名。您不需要密码,因为服务帐户具有域范围的权限。下面的链接解释了如何做到这一点。

但该链接使用 PHP 进行了描述,但它仍然可以帮助您创建域范围的委托服务帐户。

https://moometric.com/integrations/gsuite/use-gmail-api-update-signatures-gsuite-users-php/

【讨论】:

    猜你喜欢
    • 2016-11-10
    • 2017-03-03
    • 2014-09-24
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多