getRespondentEmail() 返回我的电子邮件而不是表单回复者

getRespondentEmail() returning my email not the Form responder

我在 Google 域中,我正在尝试提取表单回复者的电子邮件(这是自动收集的,因为他们必须登录才能填写表单)

但结果是我一直收到我的电子邮件而不是回复表单?

这是包含在给定表单中的代码,因此使用

var 形式 = FormApp.getActiveForm()

但我不明白为什么我每次都收到自己的电子邮件?

function GetRespondersEmail(){
  var form = FormApp.getActiveForm();
  
  var responses=form.getResponses();
/// this will give you all responses of your form as an array////

///iterate the array to get respondent email id///

for(var i = 0; i < responses.length; i++){
   var emailTo = responses[i].getRespondentEmail();
  
  Logger.log('emailTo = '+emailTo);
  return emailTo;
}
};

getRespondentEmail() :

如果启用了 Form.setCollectEmail(收集)设置,则获取提交此回复的人的电子邮件地址。

您是否将 Form.setCollectEmail(collect) 设置为 true?

注意:此功能仅适用于 Google Apps for Business、Google Apps for Education 或 Google Apps for Your Domain 的用户创建的表单。无法收集其他类型 Google 帐户的电子邮件地址。对于使用其他 Google 个帐户创建的表单,此方法会引发脚本异常。

编辑如下: 我改变了你的代码。问题是你 return 循环中的一个值,所以你永远不会完成你的循环,并且 return 只有第一个响应的电子邮件。

function GetRespondersEmail(){
  var form = FormApp.getActiveForm();
  var emailTo = []
  var responses=form.getResponses();
/// this will give you all responses of your form as an array////

///iterate the array to get respondent email id///

for(var i = 0; i < responses.length; i++){
   emailTo[i] = responses[i].getRespondentEmail();     
}
  Logger.log('emailTo = '+emailTo);
  return emailTo;
};

我试过了,似乎能满足你的需求。

好的,我吸取了教训,我想做的是访问填写表格的用户的单个电子邮件地址。所以事实证明我可以用函数 onFormSubmit() 完全替换上面的函数 即

function onFormSubmit(e) {
   var emailTo = e.response.getRespondentEmail();
}

除非我忽略了一些事情,否则这比我在上面尝试的要简单得多。