0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Gmailで特定の件名と添付ファイルの有無によってGASで自動返信する

Last updated at Posted at 2024-05-07

背景

大学のTAの仕事で、Gmailで課題提出する授業がありました。そこで、複数の生徒から課題提出が完了したかの問い合せメールが殺到し、TAが課題を出した生徒一人一人に対して「提出確認しました」とメールを送るはめになった。このような同じ文を何十人もの生徒にメールを送るのは非効率的である。そこで、課題を出した生徒に「提出完了」のメールを自動で送信する必要がある。

目的

Gmaiの自動返信には以下の2つの条件を満たしていれば送る

  1. Gmaiの件名に授業名(例えば工業力学とか)が入っていること
  2. 添付ファイル(例:PDF)が入っていること

もし、添付ファイルが含まれていない場合、「再度提出お願いします」メールを送る。

GASをのコード作成やり方

自分のGoogleDriveにアクセスし、マイドライブという所に行きます。ここで、マイドライブに「GAS」といったGAS用のフォルダを作ってそこにGASのコードをいれるといいんじゃないでしょうか。

適当なフォルダに行けたら、以下の写真のように、左上にある「新規」ボタンをクリック→「その他」の順に「Google Apps Script」を選択すると、GASのコード作成画面に行けます。
driveからスクリプト作成.png

サンプルコード

「.gs」と書かれているコードに以下のコードをコピペしてください。
簡単に説明すると、未読メールから該当する件名を探し、その中で添付ファイルがあるなら「完了メール」を、なければ「再提出メール」を送る。返信メールを送ったものは既読にし、スター(重要)マークを付ける。スターを付ける理由は人間の眼で確認した時誰が出したかを把握しやすいようにするため。
また、特定の人だけ(担当教員には自動返信したくないとき)を除外する必要がある場合、excludedEmailの中のメアドを指定すれば、そのメアドには自動返信をしない。

function ResponseMail() {
  const subject = '自動返信';
  const sendMailBodyWithAttachment = '課題の提出確認しました!';
  const sendMailBodyWithoutAttachment = '申し訳ありませんが、添付ファイルが見つかりませんでした。再度提出をお願いします。';
  const excludedEmail = '除外したいメールアドレス'; // 除外したいメールアドレスを設定

  // 未読スレッド一覧を取得
  var unreadMailThreads = GmailApp.search("label:inbox is:unread");

  // 未読スレッド一覧をループ処理でスレッドを一つずつ取り出す
  unreadMailThreads.forEach(function(unreadMailThread) {
    // スレッドのメッセージの一つ目を取得する
    var message = unreadMailThread.getMessages()[0];
    var mailSubject = message.getSubject();
    var sender = message.getFrom(); // 送信者のメールアドレスを取得

    // 送信者が除外リストに含まれている場合は、処理をスキップ
    if (sender.indexOf(excludedEmail) !== -1) {
      return; // このメールをスキップ
    }

    // 取得した件名に特定の文字列が入っているか確認する
    if (mailSubject.indexOf(subject) != -1) {
      // メッセージに添付ファイルがあるかチェックする
      var attachments = message.getAttachments();
      var replyBody;

      if (attachments.length > 0) {
        // 添付ファイルがあれば、その旨を返信用本文に設定
        replyBody = sendMailBodyWithAttachment;
      } else {
        // 添付ファイルがなければ、その旨を返信用本文に設定
        replyBody = sendMailBodyWithoutAttachment;
      }

      // 差出人にリプライする
      message.reply(replyBody);

      // 処理したスレッドを既読にする
      GmailApp.markThreadRead(unreadMailThread);

      // 処理したメールにスターを付ける
      message.star();
    }
  });
}

注意点

このコードは先ほども言ったように、未読メールから該当する件名を探しているので、 メールを一度でも既読すると自動返信ができないので、もし既読してしまったら未読にしてください。

トリガーの設定

トリガーを設定することで、自動的にコード(今回はResponseMailという関数)が実行され、勝手に自動返信をしてくれるようになる。

やり方は以下の写真のように、時計マークの「トリガー」から実行する関数を「ResponseMail」にする。あとは写真の通りに行う。私は、トリガーのタイマーを1分に設定したので、みなさんもそれでいいんじゃないでしょうか。
スクリーンショット (1906).png

完成系

コードを実行すると、課題提出したメールのスレッド?に直接返信します。さらに返信したメールにはスターを付ける。以上終わり。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?