我正在尝试将自动回复电子邮件添加到我的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
我该如何解决?
提前致谢!
答案 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()
。