You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Google Apps Script将联系人同步添加到多个Gmail账号

多Gmail账号同步录入联系人实现方案

核心限制说明

你当前使用的ContactsApp是Google Apps Script内置的通讯录服务,默认只会调用运行脚本的当前登录账号的通讯录接口,原生不支持跨账号直接操作其他Gmail账号的通讯录。

可行实现方案

方案1:个人/非Google Workspace域账号适用(无需GCP配置)

通过给每个需要同步的目标Gmail账号单独部署同一份接收脚本为Web App,主脚本批量推送联系人数据到所有Web App端点完成多账号录入。

实现步骤

  1. 每个目标Gmail账号打开关联表格,粘贴如下接收端代码:
// 每个目标账号部署的Web App接收代码
function doPost(e) {
  try {
    const contato = JSON.parse(e.postData.contents);
    const {nome, sobrenome, email, fone} = contato;
    const nomeCompleto = `${nome} ${sobrenome}`;
    // 查重逻辑
    if (
      !ContactsApp.getContactsByName(nomeCompleto)[0] &&
      !ContactsApp.getContactsByEmailAddress(email)[0] &&
      !ContactsApp.getContactsByPhone(fone)[0]
    ) {
      const contatoAtual = ContactsApp.createContact(nome, sobrenome, email);
      if (fone) {
        contatoAtual.addPhone(ContactsApp.Field.MOBILE_PHONE, fone);
        const mainGroup = ContactsApp.getContactGroup("System Group: My Contacts");
        contatoAtual.addToGroup(mainGroup);
      }
      return ContentService.createTextOutput(JSON.stringify({status: "sucesso"})).setMimeType(ContentService.MimeType.JSON);
    } else {
      return ContentService.createTextOutput(JSON.stringify({status: "existente"})).setMimeType(ContentService.MimeType.JSON);
    }
  } catch (err) {
    return ContentService.createTextOutput(JSON.stringify({status: "erro", msg: err.message})).setMimeType(ContentService.MimeType.JSON);
  }
}
  1. 每个账号将上述代码部署为Web App:
    • 点击部署>新建部署
    • 类型选择Web App
    • 执行身份选择「我(当前登录的目标账号)」
    • 谁可以访问选择「任何人」(同域可选择「我的组织内成员」)
    • 完成部署后复制生成的Web App URL,汇总到主脚本的配置里
  2. 替换你原有主脚本的代码为如下版本,把所有目标账号的Web App URL填入TARGET_WEBAPP_URLS数组:
function cadastrar() {
  // 配置区:填入所有目标账号的Web App URL
  const TARGET_WEBAPP_URLS = [
    "https://script.google.com/macros/s/xxx1/exec",
    "https://script.google.com/macros/s/xxx2/exec"
  ];
  const NOMEABA = "Cadastro";
  const NOME = 1;
  const SOBRENOME = 2;
  const EMAIL = 3;
  const FONE = 5;

  const tabelaClientes = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(NOMEABA);
  const app = SpreadsheetApp.getUi();
  const valores = tabelaClientes.getDataRange().getValues();
  const linhaINICIAL = 2;
  
  for (var linha = linhaINICIAL-1; linha < valores.length; linha++) {
    if (valores[linha][NOME] === "") continue;
    const contatoData = {
      nome: valores[linha][NOME],
      sobrenome: valores[linha][SOBRENOME],
      email: valores[linha][EMAIL],
      fone: valores[linha][FONE]
    };
    // 推送到所有目标账号
    TARGET_WEBAPP_URLS.forEach(url => {
      const options = {
        method: "post",
        contentType: "application/json",
        payload: JSON.stringify(contatoData),
        muteHttpExceptions: true
      };
      const resp = UrlFetchApp.fetch(url, options);
      const result = JSON.parse(resp.getContentText());
      if (result.status === "erro") {
        app.alert(`账号录入${contatoData.nome}失败:${result.msg}`);
      }
    });
    app.alert(`联系人${contatoData.nome}已同步到所有目标账号`);
  }
  tabelaClientes.getRange('A2:F').clearContent();
}

方案2:同Google Workspace域下账号适用(无需逐个部署)

使用GCP服务账号加全域委派权限,直接通过Google People API模拟每个目标账号身份录入联系人,步骤如下:

  1. 在GCP控制台创建服务账号,启用Google People API,配置全域委派,授予https://www.googleapis.com/auth/contacts权限
  2. 脚本中引入Apps Script OAuth2库,为每个目标账号生成访问令牌
  3. 调用People API的people.createContact接口,传入对应账号的令牌完成录入

注意事项

  • 方案1部署Web App后如果修改代码,需要重新部署生成新的URL并更新主脚本配置
  • 两种方案都需要在脚本的「服务」中提前启用对应API权限
  • 单账号每日录入联系人有配额限制,大批量操作需要拆分执行

内容的提问来源于stack exchange,提问作者Graveto Mellon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:00:00