2014-02-08 1 views
0

Я пытаюсь добавить Автоответ по электронной почте в форму для связи с Google. Я создал функцию:Автоответ Ответить Электронная почта Google Формы для контактов

Я подключил эту функцию к кнопке отправки. Однако при нажатии на кнопку подать я получаю по электронной почте говоря:

Failed to send e-mail: no recipient

Как это исправить?

Заранее благодарен!

+0

Вы подтвердили, что 'email' действительно содержит адрес электронной почты? – JSuar

+0

@JSuar Да, поле электронной почты содержит электронное письмо. –

+0

Вы пытались использовать явные значения параметров, чтобы убедиться, что функция работает на вас? Пример: 'MailApp.sendEmail ('[email protected] ',' Test Email ',' Это тестовое письмо. ', {ReplyTo:' [email protected] '})' – JSuar

ответ

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().

+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(); 
    } 
} 
+0

Большое вам спасибо за помощь! –