【GAS】フォームで取得した画像をメールで自動送信する方法

会社でGASを使ってフォームから送信された画像を自動で送るプロジェクトを任されたんだけど、どうやったらいいか分からなくて…
猫男
猫男
catman
catman
心配するな。catmanが手取り足取り教えてやる。まず、GASでフォーム画像を自動送信するには、どこから手を付ければいいか見ていこう。

GASでフォームのデータを取得する方法

GASでは、Formsサービスを使ってGoogleフォームのデータを取得できる。

フォームのトリガーをセットアップしよう

フォームが送信されたときにスクリプトが自動的に動くようにトリガーを設定する必要がある。

function setUpTrigger() {
  const form = FormApp.openById('フォームID');
  ScriptApp.newTrigger('onFormSubmit')
  .forForm(form)
  .onFormSubmit()
  .create();
}

このスクリプトは、フォーム送信時にonFormSubmitという関数を呼び出すトリガーを設定するものさ。

フォーム送信時のデータを取得しよう

トリガーが動いたら、フォームのデータを取得する。

function onFormSubmit(e) {
  const response = e.response;
  const items = response.getItemResponses();
  
  for (let i = 0; i < items.length; i++) {
    const item = items[i];
    const itemType = item.getItem().getType();
    
    if (itemType == FormApp.ItemType.FILE_UPLOAD) {
      const fileResponses = item.getResponse();
      
      for (let j = 0; j < fileResponses.length; j++) {
        const fileId = fileResponses[j];
        Logger.log('File ID: ' + fileId);
      }
    }
  }
}

getItemResponses()メソッドを使って、フォームに送信された各アイテムのデータを取得し、画像ファイルに関する情報を取り出すことができる。

わぁ、GASでこんなことができるんだね!画像ファイルのIDを取得できたら、次はどうすればいいの?
猫男
猫男
catman
catman
次は、その画像を取得して、メールで送信する方法を見てみよう。

 

GASで画像を取得しメール送信する方法

ファイルIDをもとに画像を取得し、Gmailサービスを使って送信しよう。

画像を取得する

Driveサービスを使って、ファイルIDから画像を取得する。

function getFileById(fileId) {
  const file = DriveApp.getFileById(fileId);
  return file.getBlob();
}

getFileById()メソッドでDriveからファイルを取得し、getBlob()でファイルデータをオブジェクトとして扱う。

Gmailで画像を送信する

Gmailサービスで画像を送信しよう。

function sendEmailWithImage(emailAddress, imageBlob) {
  GmailApp.sendEmail(
    emailAddress,
    'フォーム送信画像',
    '画像が送信されました。',
    {
      attachments: [imageBlob]
    }
  );
}

GmailApp.sendEmail()メソッドで、画像データを添付ファイルとして送信できる。

手順がはっきりしてきた!これならできるかも!
猫男
猫男
catman
catman
その意気だ。次は実際に試してみるんだ。間違えても何度でもやり直せばいいさ。

 

練習問題

以下の問題を解いて、この機会にGASでのフォーム画像自動送信をマスターしよう。

  1. GASでフォームのデータを取得する関数の名前を答えなさい。
  2. 画像をDriveから取得するためのメソッドはどれか?選択肢から選びなさい:
    • a) getFileById()
    • b) getImageById()
    • c) retrieveFile()
  3. Gmailで送信したいアドレスを指定するパラメータは何か?

 

練習問題の解答・解説

    1. 解答: onFormSubmit

フォーム送信時にトリガーを設定して動かす関数の名前だ。

    1. 解答: a) getFileById()
const file = DriveApp.getFileById(fileId);

Drive上の特定のファイルを取得するためのメソッドとして使用される。

    1. 解答: emailAddress
GmailApp.sendEmail(emailAddress, '件名', 'メッセージ本文', { ~ })

送信したい相手のメールアドレスを指定するためのパラメータだ。

catman、GASでできる気がしてきたよ!本当にありがとう!
猫男
猫男
catman
catman
いつでも力になるさ。君の成功をcatmanは見守っている。頑張っていこう!