Google Apps Script报错:Invalid email [Ljava.lang.Object;@xxx 求助
问题修复方案
错误原因分析
你遇到的Exception: Invalid email: [Ljava.lang.Object;@7a4edc0错误,核心原因有两个:
- 邮件模板替换的语法错误:
CorpsMessage的链式调用中,{Fonction}的替换被错误嵌套在{Date}的替换逻辑里,导致模板中的{Fonction}占位符无法被正确替换。 - 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
相关产品推荐
相关产品推荐

