GoogleフォームとSlackとメールをGASで連携する【前編 GoogleフォームとGメールを連携する】

# お申し込みフォームを簡単に作って、オペレーションも楽ちんにしたい！

オペレーションの流れ
![IMG_0672.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480279/926552db-9a3b-3676-8fbf-4cf4a41f124d.jpeg)


1. フォームが送信される
2. お問い合わせ内容をメールとSlackに通知、お問い合わせをした人には自動返信メール
3. Slack上で、お問い合わせに対してどのように対応するかチームで議論
4. 担当者がEメールで返信

このオペレーションがなかなか便利なので、備忘録として残すことにしました。
前編後編に分けてお送りします。

- 前編: GoogleフォームとGメールを連携する（この記事）
- 後編: [フォームで入力された内容をIncoming Web Hookを使ってSlackで通知する](https://qiita.com/kisaichi07/items/58307e75ec5d627290dd)

---

# この記事でやること
この記事では前編の「GoogleフォームとGメールを連携する」について説明をします。
フォームが送信されたときにお問い合わせ内容をメールで通知し、お問い合わせをした人には自動返信メールを送信するものを作ります。

# 1. Googleフォームを作る
フォームを作りましょう。
<img width="1413" alt="スクリーンショット 2020-05-01 14.00.55.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480279/d036c892-49b9-740f-83e4-3cbbf8c6fa33.png">

# 2. お問い合わせした人に自動返信するスクリプトを書く

## GASのコードを書く
フォーム編集画面の三点リーダー(︙)→「スクリプトエディタ」を開き、下記のコードをコピペ＆一部変更してください。

### コピペしてGASのエディタに貼り付ける

```javascript:GAS
FormApp.getActiveForm();

function sendForm(e) {
  var sendToAddress ="自分のメールアドレス";
  var serviceName = "【すごいアンケート】";
  var mailTitle = serviceName +'に関する新規のお問い合わせがありました';//メールのタイトルを設定
  var mailMessage = serviceName +'に関する新規のお問い合わせがありました。\n\n';
  var option = {};
  option.from = sendToAddress;
  

  var list=[];
  var itemResponses = e.response.getItemResponses();
  
  //フォームの項目に記述された内容を取得し、itemResponsesとliｓｔ
  itemResponses.forEach(function(itemResponse){
    mailMessage += '【' + itemResponse.getItem().getTitle() + '】\n'
    mailMessage += itemResponse.getResponse() + '\n\n'
    list.push(itemResponse.getResponse())
  });
  
  //フォームのメールアドレスと名前を取得し、それぞれの変数に格納する
  var userName = list[0]; 
  var userMail = list[1];
  
  // 自動返信メール件名
  var subject = serviceName +'にお問い合わせいただきありがとうございました。';
      
  // 自動返信メール本文
  var body = userName + '様\n' +
    '\n' +
    'この度は'+serviceName +'にお問い合わせいただき、誠にありがとうございました。' +
    '\n' +
    '後日、弊社担当よりご連絡させていただきますので\n' +
    'よろしくお願い申し上げます。\n' + 
    '\n' +
    '─────────────────────────\n' +
    '署名をココに\n' +
    '─────────────────────────\n' +
    '\n';
  
  // メール送信
  GmailApp.sendEmail(userMail,subject,body,option); //自動返信メール
  GmailApp.sendEmail(sendToAddress,mailTitle,mailMessage,option); //自分への問い合わせ通知
  
}

```

### 一部変更する
`userName`と`userMail`は、Googleフォームの何番目の項目かによって、番号を変えてください。
フォームの番号は、一番上から0,1,2...と続きます。

**例：3つ目の項目が名前の場合**
`var userName = list[2];`

## トリガーを設定する
<img width="433" alt="スクリーンショット 2020-05-10 19.22.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480279/fe3c385a-bdf3-4964-300d-b47827b4ebd1.png">

Form送信をトリガーにして、GASで書いたfunctionを実行したいため、トリガーをセッティングします。
実行する関数は、`sendForm`、イベントの種類を「フォーム送信時」にして保存してください。
<img width="721" alt="スクリーンショット 2020-05-14 22.22.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480279/b1a27a53-553e-2404-bc73-a99f84e9a517.png">


## GASからメール送信することを許可する
GASからメール送信できるよう、権限を与えます。

1. 画像のアイコンを押して、許可してください。
<img width="417" alt="スクリーンショット 2020-05-10 19.27.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480279/a5f31df0-3120-d419-7194-fff0d6b00f58.png">

2. 許可を確認を押す
<img width="531" alt="スクリーンショット 2020-05-10 19.30.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480279/95b3e1c1-0558-7345-75d3-c93291523fde.png">

3. ログインし、許可する
<img width="611" alt="スクリーンショット 2020-05-10 19.30.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480279/52f555eb-c72d-c9df-6e26-d69025ba24d9.png">

「このアプリは確認されていません」と出るので、「詳細を表示」を押して、安全ではないページに移動リンクを押してください。
<img width="712" alt="スクリーンショット 2020-05-10 19.30.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480279/63f73f86-58c1-1901-e2fb-c3270c836cd6.png">

スクロールして許可してください。
<img width="628" alt="スクリーンショット 2020-05-10 19.31.07.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480279/05b0625b-8779-cab8-97f7-3d1f02202e80.png">

## 完成！
これで、フォーム送信をしたらGmailが飛ぶと思います。

## 補足情報

### GASでメールを送信するClassについて

`MailApp.sendEmail` と`GmailApp.sendEmail`の２つの方法が用意されていますが、
Gmail.Appの方がオプションが多くておすすめです。

```javascript
  GmailApp.sendEmail(userMail,subject,body,option);
```

Gmail.Appを使用すると、cc/bccや、送信元のメールアドレスなど細かい設定が可能です。
[Class GmailAppについて、くわしくはこちら](https://developers.google.com/apps-script/reference/gmail/gmail-app#sendemailrecipient,-subject,-body,-options))

#### 但し、無料アカウントの場合、制限があるので注意です！
@isso_w さまから補足をいただきました！
無料版アカウントでは、GASのsendEmail関数が一日100件までしかメールを送れないという制限があるのでご注意ください。（2020年5月15日現在）。

### フォームで入力された内容をグループメール宛にEメールで送信したいときの注意
内容を個人のメールアドレスではなくGoogle Groupsのアドレス（メーリングリスト）宛に通知したい場合は、Gmailの設定からエイリアスを登録する必要があります。

設定方法についてはこちらの記事を参考にしてください。
[Google Groupのアドレスをエイリアス登録する方法](https://dekiru.net/article/16418/)

# 後編に続く！
後編ではこの内容に加え、Slack連携をします。
後編: [フォームで入力された内容をIncoming Web Hookを使ってSlackで通知する](https://qiita.com/kisaichi07/items/58307e75ec5d627290dd)