четверг, 20 сентября 2012 г.

Автоматическое подтверждение регистрации c использованием Google Forms

Пару недель назад работая с гуглоформами решили попробовать настроить автоматическую отправку сообщений о регистрации. С эксперементальными формами всё получилось, так что теперь будем использовать уже, как говориться, в живую.

Что нам для этого нужно? Подключение к интеренету, любимый бразуер, и конечно же учетная запись Google.

Итак, поехали:

- Создаем новую форму с необходимыми колонками. Для примера рассмотрим, что у нас есть три колонки: Время, Имя, Мейл. Необходимо чтобы имя скрипта и имя функции в скрипте, который приведён ниже, совпадали.

- Теперь переходим в редактор скриптов из меню инструменты "Select "Tools" => "Script Editor" и добавляем в него новый следующий скрипт:





function  EmailConfirmation () {

  var sheetname = "Sheet1"
  var emailColumnNumber = 2
  var nameColumnNumber = 3
   
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName(sheetname);
 
  if (sheet.getRange(sheet.getMaxRows(),1).getValue() != "") {
     var lastrow = sheet.getMaxRows()  
  } else {
     var count = 0
     for (var i = 0; i < sheet.getMaxRows(); i++) {
        if (sheet.getRange(sheet.getMaxRows()-i,1).getValue() != "") {
        var lastrow = sheet.getMaxRows()-i
        break;
        }
     }
  }

  var email = sheet.getRange(lastrow, emailColumnNumber).getValue();
  var emailPattern = /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|aero|asia|biz|com|coop|edu|gov|info|int|jobs|mil|mobi|name|museum|name|net|org|pro|tel|travel)\b/;
  var validEmailAddress = emailPattern.test(email);
  var name = sheet.getRange(lastrow, emailColumnNumber).getValue();

  if (validEmailAddress == true) {
    var message = ""
        + "Вы только зарегистрировались на i-ю встречу QA Club Kiev"
        + "
" + "Ваше имя: " + name + "
"
        + "
";           MailApp.sendEmail(email, "Подтверждение регистрации", "", {htmlBody: message});    
  }
}

В переменной sheetname указано имя страницы, по умолчанию это "Sheet1". Поэтому, если форма не многостраничная, и страницы, не были переименованы, то на этом шаге всё в порядке. Нужно лишь перепроверить.

В переменных emailColumnNumber и nameColumnNumber необходимо указать номера, соответствующих колонок. Для нашего случая это В = 2 и С = 3.

Теперь нужно сохранить почти готовый к работе скрипт и добавить его в триггеры (не забываем переименовать скрипт). Для этого переходим в меню триггеры "Triggers" --> "Current script's triggers" --> "Click to add a script" и выбираем только что сохранённый скрипт. Далее выбираем "From spreadsheet" и событие "On form submit". Снова сохраняем изменения.
Теперь можно зарегистрироваться с валидными данными, и проверить что пришло подтверждение на указнный при регистрации адрес.

В дальнейшем тему и тело письма можно изменить уже исходя из необходимости и целей.


6 комментариев:

  1. Я б не сильно с крутым регепспом заморачивался :)


    Достаточно проверить наличие собаки, я думаю. Этот регексп
    не пропустит:

    awesometester@i.ua

    и все другие имейлы на однобуквенных доменах
    http://regexpal.com/

    http://i.imgur.com/pyFcW.png

    ОтветитьУдалить
  2. Можно и не заморачиваться, конечно. Реализовать уже как душе угодно:) А
    http://regexpal.com/ удобный тул.

    ОтветитьУдалить
  3. Ну, в принципе можно и заморачиваться :) Но, тут дело в том, что этот регексп
    не пропустит еще и следующие имейлы:

    Me@qaclubkiev.comme@QaClubKiev.comawesometester@i.uaawesometester@yandex.ruawesometester@mail.ru


    Вот этот вроде работает нормально:
    http://stackoverflow.com/questions/46155/validate-email-address-in-javascript

    Но, об него мозг сломать можно :)

    ОтветитьУдалить
  4. Да, неплохо:) На досуге нужно поковыряться)))

    ОтветитьУдалить
  5. Доброе время суток! Я в коде ничего не понимаю. Скопировал, вставил, выдает ошибку Незавершенный строковый литерал. (line 30, file "Код").

    Помогите исправить плиз!!!! Очень надо!

    ОтветитьУдалить