自动回复电子邮件Google联系表单

时间:2014-02-08 01:11:09

标签: javascript google-apps-script google-form

我正在尝试将自动回复电子邮件添加到我的Google联系表单中。我创建了一个函数:

function sendAutoReply(e)
{
  var myemail = "myemail";
  var email = "";
  var subject = "Re: "; 
  var message = "Thanks!";
try {  
  for(var field in e.namedValues) {
    message += field + ' :: '+ e.namedValues[field].toString() + "\n\n";
    if (field == 'Subject') {
      subject += e.namedValues[field].toString();
    }
    if (field == 'Email') {
      email = e.namedValues[field].toString();
    }
  }   


  MailApp.sendEmail(email, subject, message, {replyTo:myemail});
} catch(e){
    MailApp.sendEmail(myemail, "Error in Auto replying to contact form submission. No reply was sent.", e.message);
  }
}

我将此功能连接到提交按钮。但是当我按下提交按钮时,我收到一封电子邮件说:

Failed to send e-mail: no recipient

我该如何解决?

提前致谢!

2 个答案:

答案 0 :(得分:3)

请参阅以下链接以获取解决方法。

示例解决方法代码:

var s = SpreadsheetApp.getActiveSheet();
var headers = s.getRange(1,1,1,s.getLastColumn()).getValues()[0];

// Credit to Henrique Abreu for fixing the sort order
for(var i in headers) {
    if (headers[i] = "Name") {
      name = e.namedValues[headers[i]].toString();
    }
    if (headers[i] = "Email") {
      email = e.namedValues[headers[i]].toString();
    }
    if (headers[i] = "Subject") {
      subject = e.namedValues[headers[i]].toString();
    }
    if (headers[i] = "Message") {
      message = e.namedValues[headers[i]].toString();
    }
}

答案 1 :(得分:2)

你对变量做了一些混乱。 field是一个用作索引的整数,因此像if (field == 'Email')这样的条件永远不会为真。

您必须从表单响应对象中获取键值,并使用它来选择值。

另一个答案显示了通过阅读电子表格实现这一目标的可能方法,但有一种更简单直接的方法可以直接从对象中完成。

  for(var k in e.namedValues){ keys.push(k) };
  Logger.log("total " + keys.length + " keys: " + keys); 

然后您可以使用它来检查每个响应元素。文本问题的返回值是字符串,因此您无需使用toString()

完整代码如下所示:

function formSubmit(e){
  var keys = [];
  var email = '';
  var subject = '';
  var message = '';
  var myemail = Session.getActiveUser().getEmail();

  for(var k in e.namedValues){
    keys.push(k);
  }
  Logger.log("total " + keys.length + " keys: " + keys); 
  for(var field in keys) {
    message += field + ' :: '+ e.namedValues[keys[field]] + "\n\n";
    if (keys[field] == 'Subject') {
      subject += e.namedValues[keys[field]];
    }
    if (keys[field] == 'Email') {
      email = e.namedValues[keys[field]];
    }
  }   
  MailApp.sendEmail(email, subject, message, {replyTo:myemail});
}  
顺便说一下,你不需要硬编码你的电子邮件地址,因为GS有一个方法,onFormSubmit触发器是一个可安装的触发器,它可以像你一样运行,你可以使用Session.getActiveUser().getEmail()