我如何设置自定义签名跨域Gmail API

How can I set custom signatures across a domain Gmail API

本文关键字:API Gmail 自定义 何设置 设置      更新时间:2023-09-26

我想把我的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 Delegation denied for 'myemail'。我是一个超级管理员。

我现在发现我需要使用一个服务帐户。然后我完全按照这个指南如何获得谷歌服务帐户访问令牌javascript。唯一的区别是我使用

来授权
gapi.auth.authorize({
不是

gapi.analytics.auth.authorize({

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

所以如果我用我自己的电子邮件尝试这个,我得到一个403,当我尝试一个服务帐户时,我得到一个401。它说需要登录,我怎么登录?我认为服务帐户实际上并不登录,但我使用JWT制作访问令牌。我通过

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

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

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

首先,你需要在谷歌开发控制台创建一个服务帐户,并为该帐户添加域范围授权。

之后,你去你的谷歌管理员和添加服务帐户与API控制所需的范围。

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

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

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

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