😚

studioのメールフォームを、Googleスプレッドシートに連携して、Google Apps Scriptで自動返信させる

2024/06/07に公開

studioには自動返信機能がないので、自動返信機能をGASでカバーする。

  • Googleスプレッドシートの連携は先にやっておく
  • 連携すると自動で作成される。階層はあとで移動してもOK
  • 連携したら、プレビューから一度フォームをテストすると、スプレッドシートに記入される
  • あとからinputを増減させると項目がずれるので、なるべくフォームは完成してから書いたほうがいいかも〜

結論(GAS)

function sendMailcontact(e) {
  Logger.log('sendMailGoogleForm(e) debug start');

  // 行の追加イベントのみを対象とする
  if (e.changeType != "INSERT_ROW") {
    return;
  }
  let sheet = SpreadsheetApp.getActiveSheet();
  let row = sheet.getLastRow();
  // 氏
  let lastName = sheet.getRange(row, 1).getValue();
  // 名
  let firstName = sheet.getRange(row, 2).getValue();
  // 企業名
  let company = sheet.getRange(row, 3).getValue();
  // メールアドレス
  let email = sheet.getRange(row, 4).getValue();
  // 電話番号
  let tel = sheet.getRange(row, 5).getValue();
  // お問い合わせ内容
  let detail = sheet.getRange(row, 6).getValue();

  //自動返信メール件名
  let title = "お問い合わせいただきましてありがとうございます"

  //自動返信メール本文
  let body =
    "このメールはシステムからの自動返信です。\n\n" +
    lastName = " 様\n\n" +
    "この度はお問い合わせをいただきましてありがとうございます。\n\n" +
    "下記内容にてお問い合わせを承りました。\n" +
    "ご返答までに数日と要することがございますので予めご了承ください。\n\n" +
    "▼お問い合わせ内容▼\n" +
    "---------------------------------------\n" +
    "お名前\n" +
    lastName + firstName + " 様\n\n" +
    "企業名\n" +
    company + "\n\n" +
    "メールアドレス\n" +
    email + "\n\n" +
    "電話番号\n" +
    tel + "\n\n" +
    "お問い合わせ内容\n" +
    detail + "\n\n";

  //添付ファイルの取得
  let fileId = "任意のファイルコード";
  let attachmentFile = DriveApp.getFileById(fileId).getBlob();

  // noreplyで返信
  // ただしWorkspace会員のみのオプション
  const option = {
    noReply: true,
    attachments: attachmentFile
  };
  GmailApp.sendEmail(email, title, body, option);
}

解説

項目の設定

// 氏
let lastName = sheet.getRange(row, 1).getValue();
// 名
let firstName = sheet.getRange(row, 2).getValue();

スプレッドシートのマス目の、A-1に氏、B-1に名の項目がくるので、(row, 1) (row, 2)
今回のフォームは氏と名を分けてるのでこうなってる。
これを確認するのに、スプレッドシートを連携したあとに、フォームをテスト送信したほうがいい。

あと、あとから項目を増やしたりすると面倒なので、項目は決定してから書いたほうがいいかも。

メール本文

//自動返信メール本文
let body =
  "このメールはシステムからの自動返信です。\n\n" +
  lastName + " 様\n\n" +
  "この度はお問い合わせをいただきましてありがとうございます。\n\n" +
  "下記内容にてお問い合わせを承りました。\n" +
  "ご返答までに数日と要することがございますので予めご了承ください。\n\n" +
  "▼お問い合わせ内容▼\n" +
  "---------------------------------------\n" +
  "お名前\n" +
  lastName + firstName + " 様\n\n" +
  "企業名\n" +
  company + "\n\n" +
  "メールアドレス\n" +
  email + "\n\n" +
  "電話番号\n" +
  tel + "\n\n" +
  "お問い合わせ内容\n" +
  detail + "\n\n";

\nは改行。

添付ファイル

//添付ファイルの取得
let fileId = "任意のファイルコード";
let attachmentFile = DriveApp.getFileById(fileId).getBlob();

任意のファイルコードというのは、添付したいファイルをGoogleドライブにいれて、共有リンクを出した時にでてくる以下の部分。ファイルは全体公開になってなくても問題ないけど、スプレッドシートの持ち主と同じ持ち主じゃないと、動かなかった

https://drive.google.com/file/d/ここに出てくるランダム英数字/view?usp=drive_link

オプション

const option = {
  // noreplyで返信
  // ただしWorkspace会員のみのオプション
  noReply: true,
  // 添付ファイル
  attachments: attachmentFile
};

ほかにも以下のオプションがある。replyは試したけど、使えたので、たぶん問題ないが、Fromだけは注意が必要みたい。Workspace非加入者が自動返信する場合、基本的にスプレッドシートの持ち主のアドレスで送られる。

option 意味
name 送信元の表示名
replyTo 返信先のアドレス
bcc bccを追加
cc ccを追加

https://qiita.com/tklaj/items/979606fb8bda873d5997

参考

https://developers.google.com/apps-script/reference/mail/mail-app?hl=ja
https://funrepeat.com/fr-note/3089

Discussion