如何在域Gmail API中设置自定义签名

时间:2016-11-02 03:52:46

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

我想将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”是我自己的时,这非常有效,但是当它是任何人时,我会收到以下错误:403委托被拒绝为'myemail'。我是超级管理员。

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

gapi.auth.authorize({

而不是

gapi.analytics.auth.authorize({

因为我不需要分析API。我希望这不会造成问题。我需要目录和gmail API。 在上面链接提供的代码的最后,我loadDirectoryApi()并运行代码以再次获取所有用户信息,如前所述。我甚至无法设置签名,因为此时我收到错误消息:401需要登录。

因此,如果我使用自己的电子邮件尝试此操作,我会得到403,当我尝试使用服务帐户时,我得到了401.它说需要登录,我该如何登录?我认为服务帐户实际上并没有登录,但我使用JWT来创建访问令牌。 我是通过

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

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

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