Загрузка формы Google прикрепите загруженный PDF-файл в автоматическом ответе по электронной почте

#google-apps-script #google-sheets #google-forms

Вопрос:

В настоящее время я занимаюсь проектом, в котором пользователи заполняют простую форму имени, адреса электронной почты и загружают один PDF-файл.

При отправке формы в GSheet назначения этой формы указываются имя, адрес электронной почты и URL-адрес загруженного PDF-файла. После отправки формы я могу выполнить автоматический ответ с помощью электронного письма с HTML-кодом, в котором говорится: «Получил отправку вашей формы с прикрепленным файлом». Но можно ли прикрепить этот загруженный PDF-файл к этому электронному письму, просто используя URL-адрес? Я не могу найти ClassDrive для GetFileByURL. Удалось найти только getfilebyname / type .

Я могу придумать другой способ, который заключается в том, чтобы пользователь вручную вводил имя загружаемого файла в форму и использовал скрипт приложения Google для getfilebyname. Однако я пытаюсь избежать человеческой ошибки. Человеческая ошибка, например, имя загруженного файла и имя файла, введенное в форме, не совпадают. 🙂

     function onSubmit(e) {
      var ss = SpreadsheetApp.getActive();
      var range = e.range
      var row = Number(range.getRow());
    
      var upFolder = DriveApp.getFolderById("ADDRESS OF WHERE THE UPLOADED FILE FROM THE FORM IS");
    
      var formReceived = HtmlService.createTemplateFromFile("HTML Email"); //get the html template
    
      var parent_name = ss.getRange('B' row).getValue();
      var parent_email = ss.getRange('C' row).getValue();
      var fileURL = ss.getRange('D' row).getValue();
    
      ss.getRange('E' row).setValue("Error! Email not sent.");
    
      //Tag input into the html
      formReceived.parent_name=parent_name
    
    //Once the form is submitted, the URL will show up on the Gsheet
    //in column D. Is there a way to attach the file from that URL into the mailapp below.
   //Not using the line below (getfilesbyname).

        var invoicereceipt = upFolder.getFilesByName("Can be manual input from form");
    
        if(invoicereceipt.hasNext()){
          MailApp.sendEmail({
          to: parent_email,
          name: parent_name,
          htmlBody : formReceived.evaluate().getContent(),
          attachments: [invoicereceipt.next().getAs(MimeType.PDF)],
          });
            var now = new Date()
            var k = Utilities.formatDate(now,'GMT 8',"YYYY.MM.dd HH:mm:ss")
            ws.getRange('E' index).setValue(k); 
        }
    
    }
 

Комментарии:

1. Я должен извиниться за мой плохой английский. К сожалению, я не могу понять But is it possible to attach that uploaded pdf in that email just using the URL? I am not able to find a ClassDrive for GetFileByURL. Only could find getfilebyname/type. . Могу ли я спросить вас о текущей проблеме вашего сценария и вашей цели? И можете ли вы предоставить свой текущий сценарий?

2. К сожалению, у меня нет рабочего скрипта. Цель: пользователь отправляет форму Google с 3 входами. Имя, адрес электронной почты, загрузка pdf. > Назначение в таблицу Google с 3 столбцами. Имя, адрес электронной почты, URL загруженного PDF-файла. > Автоматическое электронное письмо будет отправлено на адрес электронной почты с текстом письма «Получено» к этому письму прикреплен загруженный PDF-файл, который был отправлен через форму.

3. Спасибо за ответ. Я снова должен извиниться за мой плохой английский. К сожалению, я все еще не могу понять ваш вопрос. Но я хотел бы попытаться это понять. Когда я смогу правильно это понять, я хотел бы подумать о решении. Я был бы признателен, если бы вы могли простить мое плохое знание английского.

4. Форма Google содержит 3 вопроса: имя, адрес электронной почты, загрузка файла. Когда пользователь отправил форму и загрузил PDF-файл, мне нужно, чтобы скрипт приложения Google автоматически отправлял электронное письмо на адрес электронной почты и прикреплял загруженный PDF-файл. Я также отредактировал свой исходный пост с помощью скрипта.

5. Спасибо за ответ и добавление дополнительной информации. Из вашей дополнительной информации я предложил модифицированный сценарий в качестве ответа. Не могли бы вы подтвердить это, пожалуйста? Если это было бесполезно, я приношу свои извинения.

Ответ №1:

Я считаю, что ваша цель заключается в следующем.

  • Вы хотите отправить электронное письмо при отправке формы Google. На данный момент вы хотите прикрепить загруженный PDF-файл к электронному письму.
  • Ваш скрипт существует в электронной таблице Google, связанной с формой Google.
  • Ваша функция onSubmit установлена как устанавливаемый триггер onSubmit.

Точки изменения:

  • Заголовок сообщения электронной почты не включен. В этом случае возникает ошибка.
  • ws , index не объявлены.
  • В этом случае я подумал, что можно использовать объект event.

Когда эти пункты отражаются в скрипте, это выглядит следующим образом.

Модифицированный сценарий:

 function onSubmit(e) {
  var [, parent_name, parent_email, fileURL] = e.values;
  var formReceived = HtmlService.createTemplateFromFile("HTML Email");
  formReceived.parent_name = parent_name;
  MailApp.sendEmail({
    subject: "sample mail",
    to: parent_email,
    name: parent_name,
    htmlBody: formReceived.evaluate().getContent(),
    attachments: [DriveApp.getFileById(fileURL.split("=").pop())],
  });

  // e.range.offset(0, 1).setValue("Error! Email not sent."); // I'm not sure whether you want to use this line.
}
 
  • Загруженный PDF-файл извлекается DriveApp.getFileById(fileURL.split("=").pop()) .
  • В этом случае, пожалуйста, удалите устанавливаемый триггер onSubmit и переустановите его снова. При этом включаются дополнительные области.

Примечание:

  • Это простой модифицированный скрипт. Поэтому, пожалуйста, измените его для вашей реальной ситуации.

Ссылка:

Комментарии:

1. Привет, Танайке, большое тебе спасибо за ответ и помощь! Да, это работает! Я хотел бы больше понять в этой строке [DriveApp.getFileById(fileURL.split(«=»).pop())]. Что делают split(«=») и pop()?

2. @dracomagmus Спасибо, что ответили. Я рад, что ваша проблема была решена. Что касается вашего дополнительного вопроса, то при загрузке файла URL-адрес выглядит https://drive.google.com/open?id=### следующим образом. fileURL.split("=").pop() извлекается ### из URL-адреса. URL — адрес разделяется на split("=") . Под этим подразумевается ["https://drive.google.com/open?id", "###"] . Из этого ### извлекается с помощью pop() . pop() используется для извлечения последнего элемента из массива. Ссылка Если это было бесполезно, я приношу свои извинения.