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

Google Apps Script报错:Invalid email [Ljava.lang.Object;@xxx 求助

问题修复方案

错误原因分析

你遇到的Exception: Invalid email: [Ljava.lang.Object;@7a4edc0错误,核心原因有两个:

  1. 邮件模板替换的语法错误:CorpsMessage的链式调用中,{Fonction}的替换被错误嵌套在{Date}的替换逻辑里,导致模板中的{Fonction}占位符无法被正确替换。
  2. cc参数的类型兼容问题:虽然GmailApp官方文档声明支持数组作为cc参数,但在部分场景下,数组类型的cc可能被误识别为无效邮箱地址。

修复后的完整代码

function sendEmailFromTemplate() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var selectedRow = sheet.getActiveCell().getRow();

  const Nom = sheet.getRange("D" + selectedRow).getValue();
  const Matricule = sheet.getRange("E" + selectedRow).getValue();
  const Recepient = sheet.getRange("K" + selectedRow).getValue();
  const Fonction = sheet.getRange("G" + selectedRow).getValue();
  const date = new Date(sheet.getRange("C" + selectedRow).getValue());
  const FormattedDATE = Utilities.formatDate(date, "GMT", "EEEEE, dd MMMM yyyy");
  const FormattedDATEFR = LanguageApp.translate(FormattedDATE, 'en', 'fr');
  const Adresse = sheet.getRange("J" + selectedRow).getValue();
  const UADM = sheet.getRange("F" + selectedRow).getValue();
  const Type = sheet.getRange("B" + selectedRow).getValue();
  const Check = sheet.getRange("A" + selectedRow).getValue();

  if (Check !== true) {
    return Logger.log("Not sending email as check is not true in column A");
  }

  const TemplateTexte = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Modele_Bienvenue").getRange(4, 1).getValue();
  const fileId = "1NHqn0-1gG1fmNxfvHuYQIIbtf4aOtZQB";
  const blob = DriveApp.getFileById(fileId).getBlob();

  // 修复模板替换的链式调用逻辑
  const CorpsMessage = TemplateTexte
    .replace("{Nom}", Nom)
    .replace("{Matricule}", Matricule)
    .replace("{Adresse}", Adresse)
    .replace("{UADM}", UADM)
    .replace("{Date}", FormattedDATEFR)
    .replace("{Fonction}", Fonction);
  
  const Objet = "Confirmation date d'entrée en fonction - " + Fonction + " - " + Nom;
  const html = CorpsMessage
                .replace(/\n/g, '<br>')
                .replace('{LOGO}', '<img src="cid:logo">');

  if (validateEmail(Recepient)) {
    var cc = [];
    if (Type === "Voirie") {
      cc.push("jan.bas@real.com");
    } else if (Type === "Parcs") {
      cc.push("mou.bou@real.com");
    }

    const aliases = GmailApp.getAliases();
    if (aliases.indexOf("rh@real.com") != -1) {
      // 将cc数组转为逗号分隔的字符串,避免类型识别问题
      const ccStr = cc.join(",");
      const EmailDraft = GmailApp.createDraft(Recepient, Objet, CorpsMessage, {
        from: "rh@real.com",
        cc: ccStr,
        htmlBody: html, 
        inlineImages: {logo: blob}
      });
    } else {
      Logger.log("The desired alias does not exist");
    }

    sheet.getRange("M" + selectedRow).setValue(new Date());
    sheet.getRange("A" + selectedRow).setValue(false);
  } else {
    Logger.log("Invalid email address: " + Recepient);
  }
}

function validateEmail(Recepient) {
  const re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
  return re.test(String(Recepient).toLowerCase());
}

关键修复点说明

  • 模板替换逻辑修复:将原本嵌套的replace("{Fonction}", Fonction)从{Date}的替换参数中移出,作为独立的链式调用步骤,确保所有占位符都能被正确替换。
  • cc参数格式调整:将cc数组通过join(",")转为逗号分隔的字符串,避免GmailApp将数组对象误判为无效邮箱地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:40:31