Google Scripts运行提示getFrom() is not a function错误排查
故障根本原因
getFrom() is not a function 报错和你新增、移除多邮件线程过滤逻辑没有关联,是代码本身的对象调用逻辑存在错误,此前能无故障运行属于旧版本脚本缓存导致的偶发情况,核心问题有3个:
t.getMessages()返回值是GmailMessage对象构成的数组(对应线程下的所有邮件,哪怕线程只有1封邮件,返回的也是长度为1的数组),数组类型本身没有getFrom()方法,直接对数组调用该方法必然触发类型错误- 代码未初始化
label对象,直接调用label.removeFromThread(t)会触发变量未定义错误 - 回复逻辑中调用了
message.reply(),但代码从未定义过message这个单邮件对象,同样会触发运行错误
修复后可正常运行的代码
修复点对应上面三个问题:提前初始化标签实例、对单邮件线程取数组内的第一个(唯一)单邮件对象再调用发件人获取、回复方法,多邮件线程移除标签后直接跳过不执行后续回复逻辑:
function extractEmails() { var htmlBody = getEmailHtml(); var labelName = "auto-reply-incoming"; // 初始化标签实例 var label = GmailApp.getUserLabelByName(labelName); // 拉取匹配规则的邮件线程 var receivedSearchQuery = "label:"+labelName+" -is:sent"; var threads = GmailApp.search(receivedSearchQuery, 0, 500); threads.forEach ((t, i) => { let messageCount = t.getMessageCount(); // 邮件数大于1的线程直接移除标签,跳过后续回复逻辑 if (messageCount > 1) { label.removeFromThread(t); return; } // 单邮件线程取唯一的邮件对象,再执行发件人获取、回复操作 let messages = t.getMessages(); let targetMessage = messages[0]; let senderName = targetMessage.getFrom(); targetMessage.reply("Hi " + senderName + " \n" + "insert text here"); }); };
补充说明
如果需要提取纯发件人姓名、去掉<xxx@xxx.com>的邮箱后缀,可以对getFrom()返回的字符串做简单截取处理即可。
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

