2022/09/24に更新

【GASで時短】特定のメールを受信したら自動返信する

メール業務改善

Gmailに届いた特定のメールに対し、自動的に定型文を返すGoogle Apps Scriptです。お問い合わせの受付完了通知などにどうぞ。

こんな悩みを解決します


  • 問い合わせメールが来たときに自動的に返信したい!
  • Googleフォームは使っていないので、フォーム送信時のトリガーは使えない。

用意するもの


特にありません。スプレッドシートのコンテナバインド型プロジェクトとして実装しています。

このスクリプトで出来ること


  • 条件にマッチしたメールが届いたら、自動的にメールを返信します。
  • 条件として「過去N分間に到着した」、「件名にキーワードを含む」が指定可能です。

使い方


1.事前準備

スプレッドシートのスクリプトエディタを開き、スクリプトをコピペしたら事前設定エリアを編集します。
サンプルでは過去5分間に到着したメールで、件名に「問い合わせ:」が含まれるものとしました。
保存したら関数「onOpen」を一度実行しておいてください。

条件にマッチするメールを他のアカウントから送信してみます。
値下げ圧力をかけてくるたぬきさんからのメールです。

2.スクリプトの実行

スプレッドシートに戻り、上のメニューにある「スクリプト実行」から「問い合わせメールに自動返信する」を実行します。

3.結果の確認

メールを送信したアカウントを見てみると、自動返信メールが来ていますね。
受信したメール本文を表示していますが、なぜか改行が重複しているような・・・?

4.トリガーの設定

とりあえずうまく動いているのでトリガーをセットして自動的に返信するようにします。
事前設定で5分を指定したので、トリガーの実行間隔も同じ5分にします。

  • 実行する関数: reply_automatically
  • デプロイ時に実行: HEAD
  • イベントのソース: 時間主導型
  • 時間ベースのトリガーのタイプ: 分ベースのタイマー
  • 時間の間隔: 5分おき
5.注意点

サンプルのメール検索条件では、初回の問い合わせメールだけではなくその後とのやり取りも対象になってしまいます。
受信専用のメールアカウントで実行するか、受信日時とメールアドレスをスプレッドシートに記録し、すでに自動返信ずみならスキップするなどの対応が必要かもしれません。

また、1日あたりのメールの送信件数には制限があります。
無償版ユーザーの場合は上限が100、有償のGoogle Workspaceでも上限は1500です。お気をつけください。
制限の詳細は https://developers.google.com/apps-script/guides/services/quotas で確認できます。

スクリプト


/**
 * このスクリプトの説明、使い方はこちら。
 * https://myfunc.jp/items/00150/index.html
 */

function onOpen() {
  // スプレッドシートを開いたときに実行される関数

  // UIの取得
  const ui = SpreadsheetApp.getUi()

  // メニューの表示名
  const menu = ui.createMenu('スクリプト実行');

  // メニューに追加するボタン
  menu.addItem('問い合わせメールに自動返信する', 'reply_automatically');

  // メニューを画面に追加する
  menu.addToUi();
}

function reply_automatically() {

  // ########## 事前設定エリア ここから ##########

  // 過去何分のメールを対象にするかを指定する。トリガーの実行間隔と合わせる。
  const interval = 5;

  // 自動返信するメールのキーワードを指定する。この文字列が件名に含まれるものが対象となる。
  const keyword = '問い合わせ:';

  // ########## 事前設定エリア ここまで ##########


  // 現在時刻をUNIX時で取得する = メール検索期間の終わり
  // getTime()ではミリ秒まで返ってくるので1000で割り、小数点以下は削除する
  const term_end = Math.round(new Date().getTime() / 1000);

  // 現在時刻から事前設定したインターバル秒引いて、検索期間の始まりとする
  const term_start = term_end - (interval * 60);

  // メールの検索条件を定義する。送信済で、ユーザが入力した日付以降のメールを対象とする。
  const query = 'after:' + term_start + ' before:' + term_end + ' subject:"' + keyword + '"';

  // 条件を元にメールを検索する
  const threads = GmailApp.search(query);

  // 見つかったスレッドでループ
  for (let i = 0; i < threads.length; i++) {

    // スレッドからメールを取り出す
    // (スレッドは一連のやり取りのグループのため、1スレッドに複数のメールが含まれうる)
    let msgs = threads[i].getMessages();

    // メール1通ずつ返信していく
    for (let j = 0; j < msgs.length; j++) {

      // 自動返信メールの件名を組み立てる
      let subject = '【受付完了】(' + msgs[j].getSubject() + ')';

      // 自動返信メールの本文を組み立てる
      let body = `お問い合わせを受け付けました。翌営業日に返信させていただきます。

-- お問い合わせ内容 --
${msgs[j].getPlainBody()}
      
※このメールは自動返信です。`;

      // メール送信を実行
      GmailApp.sendEmail(msgs[j].getFrom(), subject, body);

    }
  }
}

関連するアプリ


【GASで自動化】お客様へメール自動送信する(差し込み)

メールアドレスのリストに対して、定形文を一斉に送信するGoogle Apps Scriptです。氏名をメール本文に差し込んで送信することができます。

【GASで自動化】お客様へメールを自動送信する(休眠顧客の掘り起こし)

メールアドレスのリストに対して、定形文を一斉に送信するGoogle Apps Scriptです。最終来店日からN日経過したお客様にだけ送信します。

【GASで自動化】お客様へメールを自動送信する(特定の都道府県)

特定の都道府県向けのお客様を対象にメールを送信するGoogle Apps Scriptです。

【GASで効率化】お客様へメール自動送信する(バースデーメール)

誕生日が近いお客様を対象にメールを送信するGoogle Apps Scriptです。期間の指定はポップアップで入力するので柔軟な範囲指定が可能です。

【GASで時短】送信先のメールアドレスを抽出する

Gmailで過去に送信した宛先をスプレッドシートにまとめて出力するGoogle Apps Scriptです。ウイルス等により勝手にメールが送信されることもあるようで、、チェックしやすくなるかも?

【GASで時短】特定のメールをスプレッドシートに出力する

件名に特定の文字列が含まれるメールを、スプレッドシートに転記するGoogle Apps Scriptです。フォームで受け付けたい・・けどメールでも受付せざるを得ない・・という時などに。

【GASで便利に】特定のメールが来たらSlackに通知する

Gmailに届いたメールから特定の件名のものをSlackに通知するGoogle Apps Scriptです。Slackが浸透するほどメールをあまり見なくなり、大事なメールを見逃すことが増えてきたので作りました。

タグ一覧

最新のアプリ

人気のアプリ

ページトップに戻る
myfunc.jp